使用正则表达式 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。您需要searchfindall,因为您在字符串中的任何位置而不是在开始时找到。

替换使用

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 在找到模式时进行替换。

(?&lt;=..) 是一个lookbehind 断言,意味着之前,它只是一个检查而不是匹配结果的一部分。所以/不会被替换。

同理,如果要检查是否有下划线,可以在模式末尾添加前瞻(?=_)(后跟)

【讨论】:

以上是关于使用正则表达式 python 查找和替换符号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式 python3 替换除空格和换行符旁边的数字以外的所有其他符号

在 Python 中使用正则表达式查找和替换文件中的单词列表

Postgres中的正则表达式查找和替换

shell中的正则表达式, and和or写法, vim中的查找和替换用法

正则表达式考点

python基础——正则表达式