1

我正在使用 re.sub 以通过正则表达式强制将“坏”字符串转换为“有效”字符串。我正在努力创建正确的正则表达式来解析字符串并“删除坏部分”。具体来说,我想强制一个字符串全部按字母顺序排列,并允许单词之间有一个空格。任何不同意此规则的值我想用''代替。这包括多个空格。任何帮助,将不胜感激!

import re
list_of_strings = ["3He2l2lo Wo45rld!", "Hello World- -number two-", "Hello    World    number .. three"
for str in list_of_strings:
    print re.sub(r'[^A-Za-z]+([^\s][A-Za-z])*', '' , str)

我希望输出为:

你好世界

你好世界第二

你好世界第三

4

2 回答 2

3

尝试以下是否有效。它匹配要删除的两组字符,但只有当其中至少有一个空格时,才会用空格替换它。

import re
list_of_strings = ["3He2l2lo Wo45rld!", "Hello World- -number two-", "Hello    World    number .. three"]
for str in list_of_strings:
    print(re.sub(r'((?:[^A-Za-z\s]|\s)+)', lambda x: ' ' if ' ' in x.group(0) else '' , str))

它产生:

Hello World
Hello World number two
Hello World number three
于 2013-09-11T22:08:36.520 回答
3

我希望有 2 次通过来简化正则表达式。第一遍删除非字母,第二遍删除多个空格。

pass1 = re.sub(r'[^A-Za-z\s]','',str)    # remove non-alpha
pass2 = re.sub(r'\s+',' ',pass1);       # collapses spaces to 1
于 2013-09-11T22:38:00.103 回答