我有以下列表:
['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')
,但结果不正确。
我希望任何有灵魂的人都能给我一个很好的表达方式,可以解决上述所有情况,并指出我是一个很好而简单的正则表达式源,我是新手,我可以从中学习更多关于它的信息使用它。预先非常感谢。
答案 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/