Регулярное выражение в Python, которое принимает буквы, цифры и только эти специальные символы (, .- |;! _?).

Я попытался решить проблему с помощью следующих регулярных выражений, но это не сработало:

'([a-zA-Z0-9,.-|;!_?])$'
'([a-zA-Z0-9][.-|;!_?])$'

Может кто-нибудь, пожалуйста, помогите мне написать регулярное выражение.

2
chanchal pardeshi 6 Янв 2017 в 14:03

4 ответа

Лучший ответ

Я думаю, что следующее должно работать (проверено на RegExr против Foo123,.-|;!_?):

^[\w,.\-|;!_?]*$

В своих регулярных выражениях вы забываете экранировать символ «-», который интерпретируется как диапазон символов, с которым нужно сопоставлять.

5
Tagc 6 Янв 2017 в 11:09

Используйте это только для одного персонажа:

'[a-zA-Z0-9,.\-|;!_?]' or '[\w,.\-|;!_?]'

Используйте это для всех персонажей:

'[a-zA-Z0-9,.\-|;!_?]*' or '[\w,.\-|;!_?]*'

Используйте это для равной проверки:

'^[a-zA-Z0-9,.\-|;!_?]*$' or '^[\w,.\-|;!_?]*$'
2
DomeTune 6 Янв 2017 в 11:14

Попробуйте это (вы должны убежать -, как это \-):

^[a-zA-Z0-9,.\-|;!_?]+$

+, чтобы предотвратить сопоставление пустых строк, чтобы разрешить их, вы можете использовать * вместо этого.

< Сильные > Примеры :

>>> import re
>>> 
>>> re.match('^[a-zA-Z0-9,.\-|;!_?]+$', '12.0')
<_sre.SRE_Match object at 0x00000000027EB850>
>>> re.match('^[a-zA-Z0-9,.\-|;!_?]+$', '')
>>>
>>> re.match('^[a-zA-Z0-9,.\-|;!_?]+$', 'test!?')
<_sre.SRE_Match object at 0x00000000027EB7E8>
2
ettanany 6 Янв 2017 в 11:21

Вы можете использовать \w (бонус: поддержка юникода и локали!):

соответствует любому буквенно-цифровому символу и подчеркиванию; это эквивалентно набору [a-zA-Z0-9_]

См. документацию по Python. Также вы можете использовать необработанную строку при указании шаблона регулярного выражения:

m = re.match(r'[\w,.-|;!?]+', your_string)

Обратите внимание на использование + (повторите один или несколько раз). Вы также использовали $, чтобы соответствовать концу строки, но я не включил его в свой. YMMV .

1
lorenzog 6 Янв 2017 в 11:14