我如何在python中替换正则表达式?

时间:2010-07-23 00:18:16

标签: python regex string text

给出一串文字,在Python中:

s = "(((((hi abc )))))))"
s = "***(((((hi abc ***&&&&"

如何将所有出现超过3次的非字母符号替换为空白字符串

对于以上所有,结果应为:

hi abc

3 个答案:

答案 0 :(得分:8)

这应该有效:\W{3,}:匹配发生 3或更多次的非字母数字:

>>> s = "***(((((hi abc ***&&&&"
>>> re.sub("\W{3,}", "", s) 
'hi abc'
>>> s = "(((((hi abc )))))))"
>>> re.sub("\W{3,}", "", s) 
'hi abc'

答案 1 :(得分:4)

如果你想替换任何非空间非语言序列(例如'!?&'以及你的例子),@ Stephen的回答很好。但是,如果您只想替换三个或更多相同非alphamerics的序列,反向引用将有所帮助:

>>> r3 = re.compile(r'(([^\s\w])\2{2,})')
>>> r3.findall('&&&xxx!&?yyy*****')
[('&&&', '&'), ('*****', '*')]

所以,例如:

>>> r3.sub('', '&&&xxx!&?yyy*****')
'xxx!&?yyy'

答案 2 :(得分:0)

你不能(很容易地,使用正则表达式)用一个与替换文本长度相同的“空字符串”替换它。您可以使用空字符串""或单个空格" "或您选择的任何其他常量字符串替换它;我在示例中使用了"*",以便更容易看到发生了什么。

>>> re.sub(r"(\W)\1{3,}", "*", "12345<><>aaaaa%%%11111<<<<..>>>>")
'12345<><>aaaaa%%%11111*..*'
>>>

请注意:它不会更改“&lt;&gt;&lt;&gt;” ...我假设“出现超过3次的非字母符号”意味着相同的符号必须出现超过3次“。我也假设你的意思是”超过3“而不是” 3个或更多“。