2014-12-04 276 views

回答

1

你並不需要一個正則表達式,可以簡單:

return your_string.count("'") == 1 

或者,如果你堅持有re進口的模塊:

import re 
return len(re.findall("'", my_string)) == 1 
1
import re 
p = re.compile(r'^[^']*'[^']*$', re.IGNORECASE | re.MULTILINE) 
test_str = "'dog\ndog'\ndo'g" 

re.findall(p, test_str) 

它確實有效。請看這裏。

http://regex101.com/r/yR3mM3/52

您也可以嘗試

^(?=[^']*'[^']*$).*$ 

這種利用先行找到'

+0

這也找到了帶有多個撇號的字符串。你必須指定「非撇號」,比如'^ [^'] *'[^'] * $'。 – ClasG 2014-12-04 14:09:08

+0

@ClasG現在它不會被修改。 – vks 2014-12-04 14:11:08

+0

@omertalmi你能說出哪個案例失敗 – vks 2017-01-11 09:58:02

0

這樣的:

>>> import re 
>>> re.findall(r"(?<![\w'])(?:\w+'\w*|'\w+)(?![\w'])", "'dog cat dog' m'a'ow do'g") 

(?<![\w'])是一個負面lookbehind,檢查之前沒有單詞字符或引號。 (?![\w'])是一個負面的預測,它檢查後面沒有單詞字符或引號。

所以這些測試確保只有一個報價。

more about lookaround

1

你可以用下面的正則表達式做到這一點。

^(\w*'{1}\w*)$ 

匹配

'dog 
dog' 
do'g 

不匹配

dog 
do''g 
''dog 
'dog' 
dog'' 

看那Regex demo

相關問題