使用正则表达式查找和替换符号 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
,因为您使用的 match
与 start
匹配。您需要 search
或 findall
在字符串中找到任何地方,而不是在开始处。
替换使用
re.sub(r'(?<=/)[a-z]{2}','WW',sample)
您只需要这样做:
sample = re.sub(r'(?<=/)[a-z]{2}', 'WW', sample)
无需检查匹配前的字符串。 re.sub
找到模式后进行替换。
(?<=..)
是一个后向断言,意味着 前面有 ,它只是一个检查,不是匹配结果的一部分。所以/
没有被替换。
同理,可以在pattern的末尾添加lookahead (?=_)
(followed by),如果要检查是否有下划线。
我有这样的样本:
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
,因为您使用的 match
与 start
匹配。您需要 search
或 findall
在字符串中找到任何地方,而不是在开始处。
替换使用
re.sub(r'(?<=/)[a-z]{2}','WW',sample)
您只需要这样做:
sample = re.sub(r'(?<=/)[a-z]{2}', 'WW', sample)
无需检查匹配前的字符串。 re.sub
找到模式后进行替换。
(?<=..)
是一个后向断言,意味着 前面有 ,它只是一个检查,不是匹配结果的一部分。所以/
没有被替换。
同理,可以在pattern的末尾添加lookahead (?=_)
(followed by),如果要检查是否有下划线。