【问题标题】:Regex: Accepting space anywhere but at the beginning正则表达式:在任何地方接受空间,但在开始时
【发布时间】:2013-08-15 15:06:52
【问题描述】:

我正在为 OS X 上的 Qt4.8 使用 Python 绑定。

  • 我想接受任何数字和一些其他字符和空格。
  • 字符串可以为空或任意长度。
  • 不想要的是,字符串以空格或以空格结尾。

我的工作示例:'[0-9pqw\+\-\*\#\(\)\.][0-9pqw\+\-\*\# \(\)\.]*'

但是,我不想重复两个块,一个包含空格,一个不包含空格。我猜应该有更好的方法,使用 [^],但是如何?

第二个问题:

  • 如果我想限制字符串总长度,我该怎么做?

谢谢。

【问题讨论】:

    标签: c++ python regex qt regex-negation


    【解决方案1】:

    您可以在模式的开头和结尾使用否定的lookarounds

    ^(?![ ])[0-9pqw+*# ().-]*(?<![ ])$
    

    请注意,括号不是必需的,但有助于提高可读性。您的任何转义都不是(只要您将- 放在最后)。

    【讨论】:

    • 谢谢。这似乎可以解决问题!如果不是太麻烦的话,你能解释一下第一个'^(?![ ])'吗?
    • @Phil 你应该看看我链接的教程。它比我能更好地解释环视。基本上(?!...) 尝试在当前位置匹配...。如果可以,则该模式失败。如果不能,则模式继续 - 但诀窍是,此检查实际上并没有提前引擎“光标”的位置。这就是为什么它是一个“展望”。 (?&lt;!...) 在当前位置的左边做同样的事情。
    • 非常感谢@m.buettner。今晚我也会完整阅读链接。
    【解决方案2】:

    这不是你想要的吗?

    import re 
    re.match('^[^\W].*[^\W]$', '  aaa ')
    

    (最后一个 arg 是您的测试字符串)。

    如果要确保长度小于一定数量,请使用花括号。一个字符已经用于测试包含[^\W] 表示法的测试字符串的第一个和最后一个字符。所以在这个例子中,当两边都没有空格并且测试字符串不超过 4 个字符时匹配。

    re.match('^[^\W].{1,2}[^\W]$', 'aaaa')
    

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2020-08-10
      • 2023-03-24
      • 2023-03-06
      • 2013-08-08
      相关资源
      最近更新 更多