python re.sub,包含要查找的单词列表

时间:2012-06-10 12:09:01

标签: python regex list

我对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

2 个答案:

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