我正在使用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)
我希望输出为:
Hello World
Hello World二号
Hello World number 3
答案 0 :(得分:2)
尝试以下方法有效。它匹配要移除的两个字符组,但只有当它们中至少有一个空格时才会用空格替换它。
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
答案 1 :(得分:2)
我宁愿通过2次传递来简化正则表达式。第一遍删除非alphas,第二遍删除多个空格。
pass1 = re.sub(r'[^A-Za-z\s]','',str) # remove non-alpha
pass2 = re.sub(r'\s+',' ',pass1); # collapses spaces to 1