import re
match = re.findall(r'(a)(?:.*?(b)|.*?)(?:.*?(c)|.*?)(d)?',
'axxxbxd,axxbxxcd,axxxxxd,axcxxx')
print (match)
输出:[('a', 'b', 'c', 'd'), ('a', '', 'c', '')]
我希望输出如下:
[('a','b','','d'),('a','b','c','d'),('a','','','d'),('a','','c','')]
每个列表都以“a”开头,并分别用逗号分隔字符串中的4项。你知道吗
如果您想从一个分隔的字符串中获得几个匹配项,可以先用分隔符拆分字符串并运行regex,或者用
[^<YOUR_DELIMITING_CHARS>]
替换.
(注意必须转义的\
、^
、]
和-
)。还要注意,您可以使用可选的非捕获组来消除模式中的冗余。你知道吗注意,我假设
a
、b
和c
是占位符,实际值可以是单个字符值和多字符值。你知道吗参见Python demo。你知道吗
如果分隔符是非单词字符,请使用
\W
。你知道吗参见Python demo
如果字符串可以包含换行符,则将
re.DOTALL
修饰符传递给re.findall
调用。你知道吗图案细节
(a)
-第1组捕获a
(?:.*?(b))?
-与以下序列匹配的可选非捕获组:.*?
-任何字符(如果不使用re.S
/re.DOTALL
修饰符,则不使用换行字符),出现次数为零或更多,但尽可能少(b)
-第2组:一个b
值(?:.*?(c))?
.*?
-任何字符(如果不使用re.S
/re.DOTALL
修饰符,则不使用换行字符),出现次数为零或更多,但尽可能少(c)
-第3组:一个c
值(d)?
-组4(可选):ad
。你知道吗考虑到关键序列
a... b... c... d
应该以严格的顺序匹配-使用直接的方法:输出:
相关问题 更多 >
编程相关推荐