[英]How do I use regular expressions to search for words in queries?
嗨,我目前正在研究查询求解器代码,并且正在使用正则表达式来搜索用户输入的查询中的单词。
但是,我遇到了这样一个难题:我使用的代码不能减轻我最初想法的概念。 代码如下:
def query():
print ('Enter a query\n\nThe query must not have more than 30 characters.\n')
while True:
query = raw_input ('Query: ')
if 30> len(query):
break
print ('The query must have less than 30 chracters.\n')
def querysolver():
query_words = dict.fromkeys(['screen_repair','Phone_virus','Water_damage', False])
if re.search (r'[wet]', query):
query_words['Water_damage'] = True
if re.search (r'[water]', query):
query_words['Water_damage'] = True
if re.search (r'[wet]', query):
query_words['Water_damage'] = True
if re.search (r'[screen]', query):
query_words['screen_repair'] = True
if re.search (r'[smashed]', query):
query_words['screen_repair'] = True
if re.search (r'[hacked]', query):
query_words['Phone_virus'] = True
if re.search (r'[virus]', query):
query_words['Phone_virus'] = True
然后,我将如何使用这些值来查找用户查询的解决方案?
正则表达式不是用于此的工具,并且您使用了不正确的工具。 [wet]
将匹配“ w”,“ e”或“ t”。
您在此代码示例中所做的工作可以很容易地表示如下:
if 'wet' in query or 'water' in query:
query_words['Water_damage'] = True
if 'screen' in query or 'smashed' in query:
query_words['screen_repair'] = True
if 'hacked' in query or 'virus' in query:
query_words['Phone_virus'] = True
当然in
不会检查单词边界,因此这将与shacked
匹配,但这与您使用的关键字shacked
,因为无论如何逻辑都是基本的。
我不清楚您的期望。 首先:查看正则表达式的文档,如果查询中包含三个字母w,e或t中的一个,则[wet]为true。 如果您尝试这样做,您会看到-如果插入“ wet”,几乎所有搜索都为真(w在[water]内,e在[screen] [hacked] [smashed]内,依此类推。依此类推。查找整个单词,您的正则表达式必须为“ wet”。如果只希望“ wet”而不是“ anywetthing”,则可以使用“ \\ bwet \\ b”,因为“ \\ b”在分词符上匹配。
但是还有更多问题:如何将输入发送到计算(“ querysolver”)? 要通过变量“查询”执行此操作,您会遇到一些问题。
您可以执行以下操作:
import re
def query():
print ('Enter a query\n\nThe query must not have more than 30 characters.\n')
while True:
query = raw_input ('Query: ')
print len(query), query
if 30 < len(query):
print ('The query must have less than 30 chracters.\n')
break
else:
print querysolver(query)
def querysolver(query):
query_words = dict.fromkeys(['screen_repair','Phone_virus','Water_damage', False])
if re.search (r'wet', query):
query_words['Water_damage'] = True
if re.search (r'water', query):
query_words['Water_damage'] = True
if re.search (r'wet', query):
query_words['Water_damage'] = True
if re.search (r'screen', query):
query_words['screen_repair'] = True
if re.search (r'smashed', query):
query_words['screen_repair'] = True
if re.search (r'hacked', query):
query_words['Phone_virus'] = True
if re.search (r'virus', query):
query_words['Phone_virus'] = True
return query_words
query()
但您不应在函数和输入字符串中使用名称“查询”。 还有一些更明智的if-construct方法
一个例子(不完美,但最好扩展到更多模式):
def querysolver2(query):
query_words = dict.fromkeys(['screen_repair','Phone_virus','Water_damage'])
for pattern in ['wet','water']:
pattern = r'\b'+pattern+r'\b'
if re.search(pattern,query):
query_words['Water_damage'] = True
for pattern in ['screen','smashed']:
pattern = r'\b'+pattern+r'\b'
if re.search(pattern,query):
query_words['screen_repair'] = True
for pattern in ['hacked','virus']:
pattern = r'\b'+pattern+r'\b'
if re.search(pattern,query):
query_words['Phone_virus'] = True
return query_words
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.