感谢一些最优秀的成员在这里的帮助,我学到了很多关于正则表达式的知识,并且有这个半工作。我需要添加字符:“,():; - 。?到我的正则表达式搜索。问题是我将输入的搜索字符串传递给正则表达式,并且不知道如何使其工作。
以下是代码:
text = open_file.read()
grammarList = raw_input("Enter your grammar string: ");
tags = grammarList.split("^")
tags_pattern = r"\b" + r"\s+".join(r"(\w+)/{0}".format(tag) for tag in tags) + r"\b"
# gives you r"\b(\w+)/NNP\s+(\w+)/CC\s+(\w+)/NNP\b"
from re import findall
start_position = 0
for poem in poemList:
start_position = text.find('<' + poem + '>', start_position)
end_position = text.find('</' + poem + '>', start_position)
searchtext = text [start_position:end_position]
poemname = poem
for oldname, newname in poemtitleswapList.items():
poemname = poemname.replace(oldname, newname)
print poemname
print(findall(tags_pattern, searchtext))
print "\n"
以下是文本文件的示例:
To/TO
emotion/NN
for/IN
all/DT
there/EX
is/VBZ
in/IN
it/PRP
,/,
它适用于除逗号,圆括号,句号,分号,问号,冒号,破折号和引号之外的所有内容。我需要它才能找到这些东西。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用re.escape(tag)
转义正则表达式中具有特殊含义的字符。要允许左侧的非单词字符,您可以将\w+/
替换为[^/]+/
:
pattern = r'\s+'.join(r"^([^/]+)/{0}".format(re.escape(tag)) for tag in tags)
print re.findall(pattern, searchtext, re.M)
[('is', 'in', 'it', ',')]