用regex python查找和替换符号

时间:2015-02-25 15:57:04

标签: python regex replace match

我有这样的样本:

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

我的代码返回None

3 个答案:

答案 0 :(得分:2)

您可以尝试以下正则表达式:

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

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

答案 1 :(得分:2)

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

您的代码返回None,因为您使用的match匹配start。您需要searchfindall,因为您在字符串中找到了任何位置不是一开始。

替换使用

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

答案 2 :(得分:1)

你只需要这样做:

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

在匹配之前无需检查字符串。 <{1}}在找到模式时进行替换。

re.sub是一个lookbehind断言,意味着开头,它只是一个检查而不是匹配结果的一部分。因此(?<=..)未被替换。

以同样的方式,如果要检查是否有下划线,可以在模式的末尾添加前瞻/ (后跟)

相关问题