[英]Use Python to match a letter in a string only when followed by a space, period, or nothing, without regex?
我正在尝试编写此代码以提高可读性,但是最后一个“ for x in measurement”显然不起作用。
以下打印“ t”,但我不希望它与“ test”匹配
如果确实是测试用例,我确实希望它与“ this at at”的“ 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 + '\\.' for x in measurements]
[' ' + x + '\\.' for x in measurements]
,请按顺序转义点以匹配文字点,因为点是regex中的特殊元字符,可以匹配任何字符。
[' ' + x + r'\\b' for x in measurements]
添加字边界\\b
,由于\\b
单词字符和非字符字之间的匹配,因此不会接spacet
从<space>test
问题在于,您所编码的含义“与它无关”。
您已经在数组中包括了字符串't',它是字符串'this is a test'的子字符串[即,它位于单词test的前面]。
如果您想让“后面没有内容”的意思是“字符串末尾”,那么您必须检查字符串末尾是什么,而不是使用子字符串搜索。
测量
[' t ', ' tsp ', ' T ', ' tbl ', ' tbs ', ' tbsp ', ' c ', ' t.', ' tsp.', ' T.', ' tbl.', ' tbs.', ' tbsp.', ' c.', ' t', ' tsp', ' T', ' tbl', ' tbs', ' tbsp', ' c']
您可以在测量结果中找到“ t”。因此在您的检查字符串“ this is aest”中找到“ t”。
因此,返回“ t”是正确的。
如果您想完全匹配't'而不是'txxx',则需要
[' ' + x + r'\\b' for x in measurements]
一种可能的非正则表达式方法是将string_to_check
分成单词列表。 然后in
将寻找完全匹配的单词。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.