Python Regex for Words&单一空间

时间:2013-09-11 21:59:11

标签: python regex string

我正在使用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

2 个答案:

答案 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