【问题标题】:Python regex matching on strings I don't want [duplicate]Python 正则表达式匹配我不想要的字符串 [重复]
【发布时间】:2018-03-25 21:34:43
【问题描述】:

这是我第一次尝试将正则表达式与 Python 一起使用,或者根本没有,但它没有按预期工作。我想要一个正则表达式来匹配任何字母字符或下划线作为第一个字符,然后是任意数量的字母数字字符或下划线。我使用的正则表达式是 '^[a-z_,AZ][a-z_A-Z0-9]*',它似乎在 pythex.org 上产生了我想要的东西,但在我的代码中它匹配的是我所做的字符串不想。

我的代码如下:

isMatch = re.match('^[a-z_A-Z][a-z_A-Z0-9]*', someString)
return True if isMatch else False

两个我不想要的匹配字符串示例是:“qq-q”和“va[r”。我做错了什么?

【问题讨论】:

  • 告诉我们someString是什么
  • 嗯,前两个字符完全符合预期,[a-z_A-Z] 匹配,然后[a-z_A-Z0-9] 匹配。这两个条件后面的* 表示前面的语句可以重复零次或多次。该模式将字符串的开头部分匹配为有效,然后忽略其余部分,因为您缺少结尾 $ 或任何其他模式以表明您想在那里结束搜索。
  • 如果您尝试编写一个函数来检测字符串是否是有效的 Python 标识符,您可以不使用正则表达式:尝试 str.isidentifier() 方法。

标签: python regex


【解决方案1】:

我认为您只是忘记了正则表达式末尾的$ 来指定字符串的结尾。

isMatch = re.match('^[a-z_A-Z][a-z_A-Z0-9]*$', someString)

否则,它将匹配字符串的开头而不是整个字符串,这解释了为什么它适用于"qq-q""qq" 是匹配项)和"va[r""va" 是匹配项)。

【讨论】:

  • 在 python 3.4 以上,你也可以使用 re.fullmatch 而不是添加 ^$
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
相关资源
最近更新 更多