仅当后跟空格、句点或不带正则表达式时,才使用Python匹配字符串中的字母?
为了可读性,我试图编写这段代码,但最后一段“测量中的x”显然不起作用 以下打印的是't',但我不希望它与'test'匹配仅当后跟空格、句点或不带正则表达式时,才使用Python匹配字符串中的字母?,python,regex,Python,Regex,为了可读性,我试图编写这段代码,但最后一段“测量中的x”显然不起作用 以下打印的是't',但我不希望它与'test'匹配 如果它是一个测试用例,我确实希望它与“这是一个t”中的“t”匹配 不使用正则表达式就可以吗 measurements = ['t', 'tsp', 'T', 'tbl', 'tbs', 'tbsp', 'c'] measurements = ([' ' + x + ' ' for x in measurements] + #space on either side
如果它是一个测试用例,我确实希望它与“这是一个t”中的“t”匹配 不使用正则表达式就可以吗
measurements = ['t', 'tsp', 'T', 'tbl', 'tbs', 'tbsp', 'c']
measurements = ([' ' + x + ' ' for x in measurements] + #space on either side
[' ' + x + '.' for x in measurements] + #space in front, period in back
[' ' + x + '' for x in measurements]) #space in front, nothing in back???
string_to_check = 'this is a test'
for measurement in measurements:
if measurement in string_to_check:
print(measurement)
在这里您可以使用
re.search
>>> measurements = ['t', 'tsp', 'T', 'tbl', 'tbs', 'tbsp', 'c']
>>> measurements = ([' ' + x + ' ' for x in measurements] + [' ' + x + '\.' for x in measurements] + [' ' + x + r'\b' for x in measurements])
>>> measurements
[' t ', ' tsp ', ' T ', ' tbl ', ' tbs ', ' tbsp ', ' c ', ' t\\.', ' tsp\\.', ' T\\.', ' tbl\\.', ' tbs\\.', ' tbsp\\.', ' c\\.', ' t\\b', ' tsp\\b', ' T\\b', ' tbl\\b', ' tbs\\b', ' tbsp\\b', ' c\\b']
>>> string_to_check = 'this is a test'
>>> for measurement in measurements:
if re.search(measurement, string_to_check):
print(measurement)
>>>
我在这里做了两件事
,转义点以匹配文字点,因为点是正则表达式中与任何字符匹配的特殊元字符[''+x+'\.'对于测量中的x]
添加单词边界[''+x+r'\b'表示测量中的x]
,因为\b
匹配单词字符和非单词字符,所以它不会从\b
测试中拾取
空格t
您可以在测量值中找到“t”。因此,在检查字符串“这是一个[t]est”中可以找到“t”。
所以,返回“t”是正确的
如果要精确匹配“t”而不是“TXX”,则需要
[''+x+r'\b'表示测量中的x]
问题在于,你被编码为“背后没有任何东西”的含义与你想象的不同
您已经在数组中包含了字符串“t”,它是字符串“this is a test”的子字符串[也就是说,它位于单词test的前面]
如果您希望“后面没有任何内容”表示“在字符串末尾”,那么您必须检查字符串末尾的内容,而不是使用子字符串搜索。一种可能的非正则表达式方法是将string\u to\u check
拆分为一个单词列表。然后
中的将查找完全匹配的单词
measurements = ['t', 'tsp', 'T', 'tbl', 'tbs', 'tbsp', 'c']
string_to_check = 'this is a test'
words_to_check = string_to_check.replace('.', ' ').split()
for measurement in measurements:
if measurement in words_to_check:
print(measurement)
它不应该打印测试吗?你能再举几个例子吗?喜欢正面匹配和负面匹配的例子?为了清晰起见,编辑了“投票结束”。谢谢阿维纳什。我很确定没有正则表达式是做不到的。你的解决方案至少完成了任务。非常感谢。