re 正则表达式?

re 正则表达式?

>>> import re

>>> a = '1,2,"3,4",5,6,"7,8",9,0'

>>> b = re.findall('(\".*?\")', a)

>>> print(b)

['"3,4"', '"7,8"']

上述为选择带引号的内容,如何利用该正则表达式反选得到下列结果?
['1', '2', '5', '6', '9', '0']


回答:

引号之外的内容是以逗号分割的,所以一定少不了逗号分割的步骤

先把字符串 a 改复杂些用于测试

a = '"3,4",1,2,"3,4","3,4",5,6,"7,8",9,0,"3,4"'

以下的几种做法都可以达到效果

删除带引号的文本,再以逗号分割

re.sub('(?:".*?",?|,".*?")', '', a).split(',')

# ['1', '2', '5', '6', '9', '0']

匹配以逗号分割的文本,且不包含逗号和引号

re.findall('(?<![^,])[^,"]*(?![^,])', a)

# ['1', '2', '5', '6', '9', '0']

匹配以引号之外的逗号分割的文本,再过滤出未带引号的文本

[m[1] for m in re.finditer('(?:".*?"|(.*?))(?:,|$)', a) if m[1]]

# ['1', '2', '5', '6', '9', '0']


回答:

re.sub('(\".*?\",*)', '', a).strip(",").split(",")

以上是 re 正则表达式? 的全部内容, 来源链接: utcz.com/p/938569.html

回到顶部