2014-12-04 4 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

+0

@ClasG теперь это не будет. – vks

+0

@omertalmi вы можете указать, какой случай не удалось – vks

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.

Смежные вопросы