基本上,这一切都归结为只找到全字,而不是匹配其子字符串。
我的短语如下:
texto ="你好今天是工作周的第一天"而我想要做的是将该短语分成单词,看看我是否从sql查询中获得了匹配的全字,如下所示:
sql = "select keyword from keywords"
try:
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for result in results:
keywords.append(result)
所以我有一组关键字。
所以,是的,当然,你会将这句话分开:
for word in texto.split():
if word in keywords.__str__():
print ("keyword %s detected in texto" % (word))
虽然确实找到了我的话,但它也发现了#34;我不想要的东西(一个单词的子串):
我知道在PHP中你会做这样的事情:
if (preg_match("/\b$search\b/", texto)):
{print "word found"}
我已经在SO上阅读了很多关于此问题的讨论。有人说你只是分裂,(但这就是我所做的),其他人说使用这个:
以及它是如何完成的。
>>> re.search(r'\babc\b', 'abc123')
>>> re.search(r'\babc\b', 'abc 123')
<_sre.SRE_Match object at 0x1146780>
这是最新的例子吗?根据shell解释器,它将匹配第二行。
答案 0 :(得分:0)
我不明白为什么split()不起作用。问题是def read_csv(file_name):
with open(file_name) as f:
return list(csv.reader(f))
(我认为没有必要)。它创建一个单独的字符串,在其中搜索关键字 - 然后它也会找到子字符串。
以下内容对我有用:
.__str__()
texto = "hello today is the first day of working week"
keywords = ["is", "day", "week", "work", "sun"]
for keyword in keywords:
print("keyword", keyword, end=" ")
if keyword in texto.split():
print("found.")
else:
print("not found")
和work
不匹配,sun
是文本中的子字符串,work
不在文本中。
输出
sun