如何在 Python 中编写接受字母、数字和一些选定的特殊字符 (,.-|;!_?) 的正则表达式?

How to write a regular expression in Python that accepts alphabets, numbers and a few selected special characters(,.-|;!_?)?

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

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

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

谁能帮我写正则表达式。

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

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

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

试试这个(你应该像这样转义 - \-):

^[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>

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

matches any alphanumeric character and the underscore; this is equivalent to the set [a-zA-Z0-9_]

参见 Python's documentation。此外,您可能希望在指定正则表达式模式时使用原始字符串:

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

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

仅将此用于一个字符:

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

对所有字符使用此:

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

使用这个进行相等检查:

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