Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 如何匹配不匹配的单词';t以X开头,但以Y结尾,带正则表达式_Python_Regex - Fatal编程技术网

Python 如何匹配不匹配的单词';t以X开头,但以Y结尾,带正则表达式

Python 如何匹配不匹配的单词';t以X开头,但以Y结尾,带正则表达式,python,regex,Python,Regex,榜样 X=This Y=That 不匹配 ThisWordShouldNotMatchThat ThisWordShouldNotMatch WordShouldNotMatch AWordShouldMatchThat 匹配 ThisWordShouldNotMatchThat ThisWordShouldNotMatch WordShouldNotMatch AWordShouldMatchThat 我尝试了(?但似乎不容易:) 作为自由间距正则表达式: ^

榜样

X=This
Y=That
不匹配

ThisWordShouldNotMatchThat
ThisWordShouldNotMatch
WordShouldNotMatch
AWordShouldMatchThat
匹配

ThisWordShouldNotMatchThat
ThisWordShouldNotMatch
WordShouldNotMatch
AWordShouldMatchThat
我尝试了
(?但似乎不容易:)

作为自由间距正则表达式:

^             # Start of string
  (?!This)    # Assert that "This" can't be matched here
  .*          # Match the rest of the string
  That        # making sure we match "That"
$             # right at the end of the string
这将匹配满足条件的单个单词,但前提是该单词是正则表达式的唯一输入。如果您需要在许多其他单词的字符串中查找单词,请使用

\b(?!This)\w*That\b
\b
是单词边界锚点,因此它在单词的开头和结尾匹配
\w
表示“字母数字字符”。如果您还希望允许非字母数字作为“单词”的一部分,请改用
\S
——这将匹配任何非空格的字符


在Python中,您可以执行
words=re.findall(r“\b(?!This)\w*That\b”,text)

你用的是哪种语言?你的意思是像字母序列一样的单词吗?@mcandre我用的是python,但这并不是一个复杂的单词,有很多不同,我猜@Gumbo它实际上是一个可以与之相匹配的单词\w+我感谢你诚实的批评,没有愚蠢的评论。我现在当然要退出了。@chaosption,我建议你是y你取消删除你的答案并修改正则表达式以使用lookahead和lookahead-我觉得它相当优雅,并会立即对它进行升级。它甚至可能比我的更快,因为正则表达式引擎不需要做任何回溯。我能想到的唯一缺点是它在JavaScript或Ruby 1.8中无法工作,因为它们不支持回头看。谢谢你的回答,但我认为这里漏掉的一点是-单词-不是字母序列这里是测试,正则表达式适用于单个单词时效果很好。在你的测试中,单词被分散在两行之间,中间有更多的其他单词。你可以把它放在规范中。@Tim Pietzcker这是正确的,所以这是一个很好的测试int为我学习如果单词是单独的或在其他方面有很大的不同,再次感谢。。。