除非存在字符,否则匹配的正则表达式?

时间:2016-06-23 19:32:27

标签: python regex

我如何匹配' x'在右侧有任何数量的空白,除非' x'之后是另一个' x'?

到目前为止,我有:

find_nonSpace_rightSideOf_x = re.compile(r'x[\s]*')

但显然,即使文字是“xx”,这仍然会被捕获。我怎样才能抓住这个问题' xaldkfjda' x' x'' x adkf'等,而不是第一个x:' xxaldkfjdlk& #39;,' xx'等等?

编辑:最后一句的结尾应该是" ...但不是第一个TWO x:' xxaldkfjdlk',' xx'等等?"简而言之,我想要抓住一个x'但从来没有两个x' xx' - 并排。这有帮助吗?感谢您的投入到目前为止!

3 个答案:

答案 0 :(得分:2)

使用负面预测断言:

re.compile(r'x(?!x)')

抓住 x

中的第二个'xxaldkfjdlk'
  

但不是第一个x

捕捉空格,请添加:\s*

re.compile(r'x(?!x)\s*')

一些试验:

>>> m = re.compile(r'x(?!x)\s*')
>>> m.search('xx  ')
<_sre.SRE_Match object; span=(1, 4), match='x  '>
>>> m.search('xxaldkfjdlk')
<_sre.SRE_Match object; span=(1, 2), match='x'>
>>> m.search('xxxx')
<_sre.SRE_Match object; span=(3, 4), match='x'>

答案 1 :(得分:2)

另一个简单的解决方案是:

x[^x][\s]*

即。 'x'后跟“not-x”,后跟空格。

BTW,一个非常有用的工具是python正则表达式测试器:http://pythex.org/

答案 2 :(得分:2)

如果我正确理解了您的问题,您希望将最后x与该行的结尾相匹配。

要做到这一点,你可以使用这个正则表达式:

x[^x]*$

<强> Working demo

enter image description here