Я хочу найти все слова, которые содержат char '
один раз.Regex найти слово содержать определенный char
, например:
'dog
dog'
do'g
I worote ^.*'.*
, но он не работает.
Я хочу найти все слова, которые содержат char '
один раз.Regex найти слово содержать определенный char
, например:
'dog
dog'
do'g
I worote ^.*'.*
, но он не работает.
Вам не нужно регулярное выражение, вы можете просто:
return your_string.count("'") == 1
Или, если вы настаиваете, чтобы re
импортирован в модуле:
import re
return len(re.findall("'", my_string)) == 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
Вы также можете попробовать
^(?=[^']*'[^']*$).*$
Это использование опережения найти '
.
так:
>>> import re
>>> re.findall(r"(?<![\w'])(?:\w+'\w*|'\w+)(?![\w'])", "'dog cat dog' m'a'ow do'g")
(?<![\w'])
- отрицательный lookbehind, который проверяет, нет ли словных символов или кавычек раньше. (?![\w'])
- это негативный взгляд, который проверяет, нет ли словных символов или кавычек после.
Таким образом, эти тесты обеспечивают наличие только одной цитаты.
вы можете сделать это с помощью регулярных выражений ниже.
^(\w*'{1}\w*)$
Матчи
'dog
dog'
do'g
Не соответствует
dog
do''g
''dog
'dog'
dog''
Посмотрите на Regex demo.
Это находит строку с несколькими апострофами. Вам нужно будет указать «не апострофы», как '^ [^ '] *' [^ '] * $'. – ClasG
@ClasG теперь это не будет. – vks
@omertalmi вы можете указать, какой случай не удалось – vks