Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅当后跟空格、句点或不带正则表达式时,才使用Python匹配字符串中的字母?_Python_Regex - Fatal编程技术网

仅当后跟空格、句点或不带正则表达式时,才使用Python匹配字符串中的字母?

仅当后跟空格、句点或不带正则表达式时,才使用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

为了可读性,我试图编写这段代码,但最后一段“测量中的x”显然不起作用

以下打印的是't',但我不希望它与'test'匹配
如果它是一个测试用例,我确实希望它与“这是一个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)

它不应该打印测试吗?你能再举几个例子吗?喜欢正面匹配和负面匹配的例子?为了清晰起见,编辑了“投票结束”。谢谢阿维纳什。我很确定没有正则表达式是做不到的。你的解决方案至少完成了任务。非常感谢。