我有一个python正则表达式,在这里我看到它忽略了匹配字符串中的第一个字符。 当我使用pythex.org尝试相同的正则表达式时,我可以看到它按照预期工作。 有人能帮我看这个问题的原因吗?
import re
def expandTrafficItemList(a):
skip_list = []
pat = re.compile(r'([A-Za-z]+)(\d+)-[A-Za-z]+(\d+)')
if a:
c = a.split(',')
print(c)
for items in c:
print(items) # here it is not matching the string TRF instead it takes only RF
b = pat.search(items, re.I)
print(b.group(0))
a = "'TRF1-TRF25','RAW1-RAW4'"
expandTrafficItemList(a)
输出:
["'TRF1-TRF25'", "'RAW1-RAW4'"]
'TRF1-TRF25'
RF1-TRF25
'RAW1-RAW4'
AW1-RAW4
你把旗子插错地方了。 当您将re.i
放入search
方法时,您实际上在无意中更改了search
的开始位置。 请参阅re
文档以了解更多相关信息。 re.i
标志实际上位于compile
方法中。 而且,您似乎不需要它,因为您使用了[A-Za-z]
,它覆盖了大小写值,但是如果您将来需要它作为更多的标志,请将它放在compile
中。
您的固定代码:
import re
def expandTrafficItemList(a):
skip_list = []
pat = re.compile(r'([A-Za-z]+)(\d+)-[A-Za-z]+(\d+)', flags=re.I)
if a:
c = a.split(',')
print(c)
for items in c:
print(items)
b = pat.search(items)
print(b.group(0))
a = "'TRF1-TRF25','RAW1-RAW4'"
expandTrafficItemList(a)
输出:
["'TRF1-TRF25'", "'RAW1-RAW4'"]
'TRF1-TRF25'
TRF1-TRF25
'RAW1-RAW4'
RAW1-RAW4