我对RE不太熟悉,但我试图迭代列表并使用re.sub
从变量first_word
中保存的大块文本中取出多个项目。 / p>
我首先使用re.sub
删除代码,这样可以正常使用,但我接下来要删除exclusionList
变量中的所有字符串,我不知道该怎么做。
感谢您的帮助,以下是引发异常的代码。
exclusionList = ['+','of','<ET>f.','to','the','<L>L.</L>']
for a in range(0, len(exclusionList)):
first_word = re.sub(exclusionList[a], '',first_word)
例外:
first_word = re.sub(exclusionList[a], '',first_word)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 245, in _compile
raise error, v # invalid expression error: nothing to repeat
答案 0 :(得分:8)
加号是正则表达式中的运算符,意思是“前面的一个或多个重复”。例如,x+
表示x
的一次或多次重复。如果要查找并替换实际的+
符号,则需要将其转义为:re.sub('\+', '', string)
。因此,请更改exclusionList中的第一个条目。
你也可以消除for循环,如下所示:
exclusions = '|'.join(exclusionList)
first_word = re.sub(exclusions, '', first_word)
管道符号|
表示正则表达式中的分离,因此x|y|z
匹配x或y或z。
答案 1 :(得分:2)
您的程序的基本形式是正确的,所以我怀疑您遇到的任何问题都与您正在使用的正则表达式有关。 '+'本身是一个无效的正则表达式,你需要使用'\'来逃避它。
从使用角度来看,Python允许您指定字符串不应该执行任何反斜杠转义,这样当您只是'\'时,您不必使用'\\'来丢弃正则表达式。这个语法是一个领先的“r”,就像在r'\+'
中一样,你应该用你的exclusionList替换第一个项目。
如果您要提取“to”,“the”等单词,那么您还要确保提取整个单词,并且不要意外地提取“to”中的“to”,或者“其他”中的“the”。添加“\ b”以指定字边界以阻止此操作:r'\bto\b'
和r'\bthe\b'
。
最后,for a in range(0, len(exclusionList)):
更简单地通过迭代列表本身来编写:for exclusion in exclusionList:
。