我正在从excel(包含生物数据)文件中读取一个句子,并希望提取其工作所在的组织。该文件还包含指定该人在哪里学习的句子。
例如:


我正在学习“ x”指令(大学)
我是'y'大学的学生


我想跳过这些类型的句子。

我正在使用正则表达式来匹配这些句子,如果它与学生有关,则跳过该部分,只有其他行我想写在单独的Excel文件中。

我的代码如下。

csvdata = pandas.read_csv(“ filename.csv”,“,”);
    对于csvdata中的数据:

        regEX=re.compile('|'.join([r'\bstudent\b',r'\bstudy[ing]\b']),re.I)
        matched_data=re.match(regEX,data)
        if matched_data is not None:
            continue

        else:
            ## write the sentence to excel


但是,当我检查新创建的excel文件时,它仍然包含包含“ student”,“ study”的句子。
如何修改正则表达式以获得结果。

最佳答案

这里有两件事:

1)使用re.searchre.match仅在字符串开头搜索)
 2)正则表达式应为regEX=re.compile(r"\b(?:{})\b".format('|'.join([r'student',r'study(?:ing)?'])),re.I)

[ing]仅匹配1个符号,即ing,而您打算匹配可选的ing结尾。具有?量词-(?:ing)?的非捕获组实际上匹配1或0个ing序列。

同样,\b(x|y)\b是一种比\bx\b|\by\b更有效的模式,因为它涉及的回溯步骤更少。

这只是此正则表达式的a demo

import re
pat = r"\b(?:{})\b".format('|'.join([r'student',r'study(?:ing)?']))
print(pat)
# => \b(?:student|study(?:ing)?)\b
regEX=re.compile(pat,re.I)
s = "He is studying here."
mObj = regEX.search(s)
if mObj:
    print(mObj.group(0))
# => studying

关于python - 如何排除包含特定单词的句子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37296039/

10-13 08:51