【问题标题】:Python Alphanumeric RegexPython 字母数字正则表达式
【发布时间】:2014-05-24 16:39:17
【问题描述】:

下面我有以下正则表达式:

alphanumeric = compile('^[\w\d ]+$')

我正在针对这个正则表达式运行当前数据:

Tomkiewicz Zigomalas Andrade Mcwalters 

我有一个单独的正则表达式来仅识别字母字符,但上面的数据仍然符合字母数字标准。

编辑:如何停止与上述正则表达式匹配的唯一 alpha 数据?

【问题讨论】:

  • 括号中的字符类匹配任何个表达式。 [\w\d] 表示“数字或字母”。如果您只想要字母,请删除 \d
  • 我想要字母和数字。我希望它只匹配字母数字数据,但它匹配只有字母字符的数据。
  • @g.d.d.c \w 也包括数字 :-)
  • 那么“字母数字数据”必须至少包含一位数字和至少一个字母?前任。 “1a”是字母数字,但“1”不是,“a”不是?
  • @Kevin 是的,没错。

标签: python regex match


【解决方案1】:

说明:可以有两种形式:

  1. 以数字字符开头,然后应该有一些字符,然后可以是任意数量的字母数字字符。
  2. 可以以字母开头,然后是一些数字,然后是任意数量的字母数字字符。

演示:

>>> an_re = r"(\d+[A-Z])|([A-Z]+\d)[\dA-Z]*"
>>> re.search(an_re, '12345', re.I) # not acceptable string
>>> re.search(an_re, 'abcd', re.I) # not acceptable string 
>>> re.search(an_re, 'abc1', re.I) # acceptable string 
<_sre.SRE_Match object at 0x14153e8>
>>> re.search(an_re, '1abc', re.I)
<_sre.SRE_Match object at 0x14153e8>

【讨论】:

  • @Glitchezz 它可以与I 一起使用,但是了解我的RE?请记住,我没有使用\w,因为它包括_,我留下了^$作为练习
【解决方案2】:

使用 lookahead 断言至少存在一个 alpha 和至少一个数字的条件:

(?=.*[a-zA-Z])(?=.*[0-9])^[\w\d ]+$

上面的 RegEx 使用两个前瞻来首先检查每个条件的整个字符串。前瞻搜索直到找到指定范围内的单个字符。如果断言匹配,则继续进行下一个断言。我从 OP 的原始尝试中借用的最后一部分,只是确保整个字符串由一个或多个低/高 alpha、下划线、数字或空格组成。

【讨论】:

  • Tenub 我试图理解你的 RE 但不能,你能帮我解释一下吗? (虽然我已经为明天的课程添加了书签)+1 用于高级 RE 示例。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多