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

时间:2017-01-06 11:03:05

标签: python pyramid colander

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

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

在你的正则表达式中,你忘了逃避' - '字符,被解释为要匹配的字符范围。

答案 1 :(得分:2)

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

^[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 :(得分:2)

仅用于一个字符:

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

将此用于所有字符:

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

使用它进行同等检查:

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

答案 3 :(得分:1)

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

  

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

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

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

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