正则表达式python2.7

时间:2018-08-28 05:14:07

标签: python regex python-2.7

我有以下列表:

['L INE', 'LI NE', 'LIN E', 'L I NE', 'L I NE', 'L I N E']

我想使用正则表达式将上述列表的每个实例替换为“ LINE”。我使用了以下表达式re.sub('^L\s+[A-Z]E$'|'^L\s+[A-Z]\s+E$', 'LINE'),但结果不正确。

我希望任何有灵魂的人都能给我一个很好的表达方式,可以解决上述所有情况,并指出我是一个很好而简单的正则表达式源,我是新手,我可以从中学习更多关于它的信息使用它。预先非常感谢。

3 个答案:

答案 0 :(得分:1)

lst=['L INE', 'LI NE', 'LIN E', 'L I NE', 'L I NE', 'L I N E']
#loop through each item in list
for i in range(len(lst)):
  #\s means 0 or more whitespaces
  lst[i]=re.sub('^L\s*I\s*N\s*E$','LINE',lst[i]) 
print lst

答案 1 :(得分:0)

 import re
 a=['L INE', 'LI NE', 'LIN E', 'L I NE', 'L I NE', 'L I N E']
 for b in a: 
    print(re.sub('L\\s*I\\s*N\\s*E', 'LINE', b));

答案 2 :(得分:0)

您的正则表达式正在寻找太多和/或太少的东西:^L\s+[A-Z]E$将匹配“ L [任何大写字母] E”,例如“ L XE”。但是\s+需要一个或多个空格字符,因此它将跳过“ LXE”。

由于空格可以出现在任何字符之间,因此您可以制作一个正则表达式,在您知道需要匹配的每个字符之间搜索零个或多个空格字符(\s)。所以:

^(l|L)\s*(i|I)\s*(n|N)\s*(e|E)\s*$

将匹配列表中的项目。

一种更简单易懂的方法是在所有字符串上使用replace()。这应该比在正则表达式上进行编译和匹配更快。

如果您知道它们全部都是大写的,例如:

myList = ['L INE', 'LI NE', 'LIN E', 'L I NE', 'L I NE', 'L I N E']
# this iterates over your original list and makes a new list that 
# is composed of just the items with whitespace removed
cleanedList = [item.replace(" ","") for item in myList]
# print it and see!
print cleanedList

如果您还需要转义其他模式,或者需要设置某些条件(可能要删除空格),则也会变得更加复杂。

我真的建议您深入研究正则表达式,因为它们非常有用,但是在Python中通常有一种更简单的方法!尝试搜索在线正则表达式测试器,以查找许多交互式正则表达式工具之一。他们超级有帮助。 Here's不错:https://regex101.com/