使用正则表达式 python 查找和替换符号
Posted
技术标签:
【中文标题】使用正则表达式 python 查找和替换符号【英文标题】:Find and replace symbols with regex python 【发布时间】:2015-04-27 17:12:48 【问题描述】:我有这样的样本:
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
【问题讨论】:
【参考方案1】:sample = 'TEXT/xx_271802_1A'
p = re.compile("(/[a-z]2)")
print p.search(sample).group()
您的代码返回None
,因为您正在使用与start
匹配的match
。您需要search
或findall
,因为您在字符串中的任何位置而不是在开始时找到。
替换使用
re.sub(r'(?<=/)[a-z]2','WW',sample)
【讨论】:
【参考方案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 个字母,如果立即重复则匹配它。
【讨论】:
这里是输入TEXT/qq_202_1A TEXT/sg_27_1 TEXT/ut_2718的样本 猜猜你应该使用[a-z]2
如果字母不重复它可能会失败
@vks 噢!既然你已经回答了(没有演示),改变我的答案是不值得的! :) (只需投票支持你并离开 :))
@goquartzquartz 这将返回'TEXT/WW_202_1A TEXT/sg_27_1 TEXT/ut_2718'
【参考方案3】:
你只需要这样做:
sample = re.sub(r'(?<=/)[a-z]2', 'WW', sample)
在匹配之前不需要检查字符串。 re.sub
在找到模式时进行替换。
(?<=..)
是一个lookbehind 断言,意味着在之前,它只是一个检查而不是匹配结果的一部分。所以/
不会被替换。
同理,如果要检查是否有下划线,可以在模式末尾添加前瞻(?=_)
(后跟)。
【讨论】:
以上是关于使用正则表达式 python 查找和替换符号的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式 python3 替换除空格和换行符旁边的数字以外的所有其他符号
在 Python 中使用正则表达式查找和替换文件中的单词列表