【问题标题】:Regex to match a string based on particular character count [duplicate]正则表达式根据特定字符数匹配字符串[重复]
【发布时间】:2018-11-23 14:37:06
【问题描述】:

这不是一个重复的问题,其他问题是关于正则表达式的重复,我的问题是我们如何在正则表达式中获取/限制特定字符数以进行验证,我正在寻找一个正则表达式来匹配字符串仅当该字符串的字符数 ' 为 1。 示例:

patt = #IDontKnow
s = "Shubham's"
if re.match(patt, s):
    print ("The string has only ONE '")
else:
    print ("The String has either less or more than ONE ' count")

【问题讨论】:

  • 你试过什么?请提供MCVE
  • @MCVE,我对正则表达式很陌生,还没有任何模式。
  • 你为什么不先阅读a manual,如果你遇到任何问题,然后发布你的尝试?
  • @sophros,我已经尝试了我能做的,但我无法在正则表达式中获取字符数并同时进行比较。

标签: regex python-3.x


【解决方案1】:

我猜你要找的是这个:

import re
pat = "^[^\']*\'[^\']*$"
print (re.match(pat, "aeh'3q4'bl;5hkj5l;ebj3'"))
print (re.match(pat, "aeh3q4'bl;5hkj5l;ebj3'"))
print (re.match(pat, "aeh3q4bl;5hkj5l;ebj3'"))
print (re.match(pat, "'"))
print (re.match(pat, ""))

提供输出:

None
None
<_sre.SRE_Match object; span=(0, 21), match="aeh3q4bl;5hkj5l;ebj3'">
<_sre.SRE_Match object; span=(0, 1), match="'">
None

"^[^\']*\'[^\']*$" 做什么?

^ 匹配字符串的开头

[^\']* - * 匹配 [] 中定义的集合中的 0 个或多个字符。在这里,我们有一个使用^ 的集合否定。该集合被定义为一个字符 - ',它被转义,因此看起来像 \'。总之,这个组匹配任意数量的任意字符除了'

\' - 匹配一个且唯一的字符 '

$ - 匹配字符串的结尾。如果没有它,部分匹配可能会包含更多 ' 字符。您可以与上面的比较:

print (re.match("^[^\']*\'[^\']*", "aeh'3q4'bl;5hkj5l;ebj3'"))

<_sre.SRE_Match object; span=(0, 7), match="aeh'3q4">

【讨论】:

  • 完全正确!!太感谢了。但不幸的是,我对此有很多反对意见。 :(
  • 这在文本编辑器中也很有用,可以在文本模板(pug、jade...)中查找缺少的右引号。谢谢。
【解决方案2】:

为什么不直接使用.count()

s = "Shubham's"
if s.count("\'") == 1:
    print ("The string has only ONE '")
else:
    print ("The String has either less or more than ONE ' count")

【讨论】:

  • 完全是我的想法。 Python 不仅仅是不必要的复杂正则表达式的包装器。
  • @Mark,我需要一个正则表达式,我必须将它作为 wtforms 中的验证器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2023-02-01
  • 2023-03-09
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
相关资源
最近更新 更多