使用正则表达式查找和替换符号 python

Find and replace symbols with regex python

我有这样的样本:

sample = 'TEXT/xx_271802_1A'
p = re.compile("(/[a-z]{2})")
print p.match(sample)

xx 的位置可能是 [a-z] 中的任何一个,数量为 2:

TEXT/qq_271802_1A  TEXT/sg_271802_1A  TEXT/ut_271802_1A

我怎样才能找到这个 xx 和 f.e。将其替换为 'WW':

TEXT/WW_271802_1A  TEXT/WW_271802_1A  TEXT/WW_271802_1A

我的代码returnsNone

您可以试试下面的正则表达式:

>>> sample = 'TEXT/xx_271802_1A'
>>> import re
>>> re.findall(r'([a-z])',sample)
['x']
>>> re.sub(r'([a-z])','WW',sample)
'TEXT/WW_271802_1A'
>>> sample = 'TEXT/WW_271802_1A TEXT/WW_271802_1A TEXT/WW_271802_1A'
>>> re.sub(r'([a-z])','WW',sample)
'TEXT/WW_271802_1A TEXT/WW_271802_1A TEXT/WW_271802_1A'

正则表达式 ([a-z]) 搜索 1 个字母,如果立即重复则匹配它。

sample = 'TEXT/xx_271802_1A'
p = re.compile("(/[a-z]{2})")
print p.search(sample).group()

您的代码 return None,因为您使用的 matchstart 匹配。您需要 searchfindall在字符串中找到任何地方,而不是在开始处。

替换使用

re.sub(r'(?<=/)[a-z]{2}','WW',sample)

您只需要这样做:

sample = re.sub(r'(?<=/)[a-z]{2}', 'WW', sample)

无需检查匹配前的字符串。 re.sub 找到模式后进行替换。

(?<=..) 是一个后向断言,意味着 前面有 ,它只是一个检查,不是匹配结果的一部分。所以/没有被替换。

同理,可以在pattern的末尾添加lookahead (?=_) (followed by),如果要检查是否有下划线。