2016-06-23 71 views
0

如何將'x'與右側任意數量的空白匹配,除非'x'後面跟着另一個'x'?正則表達式匹配,除非一個字符存在?

到目前爲止,我有:

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

但很明顯,這仍然會趕上即使文本是「XX」。我怎樣才能使這個捕獲'xaldkfjda','x','x adkf'等,但不是'xxaldkfjdlk','xx'等中的第一個x?

編輯:最後一句的結尾應該是「......但不是第一個兩個x的:'xxaldkfjdlk','xx'等?」簡而言之,我想抓住一個'x',但並不是兩個x' - 'xx' - 並排。這有幫助嗎?感謝您的輸入!

+0

是什麼原因,你逃避X? –

+1

你可以把樣本輸出和你的預期匹配嗎? –

回答

2

使用負先行斷言:

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

威爾'xxaldkfjdlk'

第二x但不是第一個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'> 
2

另一種簡單的解決辦法是這樣的:

x[^x][\s]* 

即'x'後跟「not-x」,後跟空格。

BTW,一個非常有用的工具是Python的正則表達式測試儀:http://pythex.org/

+0

這個正則表達式匹配'x'不是'x'和多個空格 –

+0

我想我在編寫時正在編輯它。 :) –

+0

我想你想寫'x [^ x] * \ s *' –

2

如果我明白你的問題正確,你要到最後x匹配到行的末尾。

要做到這一點,你可以用這個表達式:

x[^x]*$ 

Working demo

enter image description here

相關問題