2

Python 中的正则表达式,它接受字母、数字和仅这些特殊字符 (,.-|;!_?)。

我尝试通过以下正则表达式解决问题,但没有奏效:

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

有人可以帮我写正则表达式吗?

4

4 回答 4

6

我认为以下应该有效(在 RegExr 上测试Foo123,.-|;!_?):

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

在您的正则表达式中,您忘记转义“-”字符,该字符被解释为要匹配的字符范围。

于 2017-01-06T11:09:01.443 回答
3

试试这个(你应该-像这样逃脱\-):

^[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>
于 2017-01-06T11:09:59.290 回答
3

仅将其用于一个字符:

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

将此用于所有字符:

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

使用它进行平等检查:

'^[a-zA-Z0-9,.\-|;!_?]*$' or '^[\w,.\-|;!_?]*$'
于 2017-01-06T11:14:19.890 回答
2

您可以使用\w(奖励:Unicode 和语言环境支持!):

匹配任何字母数字字符和下划线;这等效于集合 [a-zA-Z0-9_]

请参阅Python 的文档。此外,在指定正则表达式模式时,您可能希望使用原始字符串:

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

注意使用+(重复一次或多次)。您还曾经$匹配字符串的结尾,但我没有将其包含在我的字符串中。YMMV。

于 2017-01-06T11:14:16.967 回答