我正在从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.search
(re.match
仅在字符串开头搜索)
2)正则表达式应为regEX=re.compile(r"\b(?:{})\b".format('|'.join([r'student',r'study(?:ing)?'])),re.I)
[ing]
仅匹配1个符号,即i
,n
或g
,而您打算匹配可选的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/