【问题标题】:Regex for string matching with special escaping rule使用特殊转义规则匹配字符串的正则表达式
【发布时间】:2013-06-03 18:28:30
【问题描述】:

我正在尝试将特殊类型的字符串文字与一些时髦的转义规则相匹配。

一般形式如下:

"some string"

使用诸如“(.*?)”之类的模式很容易匹配

但是,您可以通过将引号加倍来转义引号,例如:

"hello "" there" 变为 hello " there
"hello """" there" 变为 hello "" there

这就是我的正则表达式技能失败的地方。我怎样才能匹配这样的字符串?

哦,我使用的是 python 3.1。

【问题讨论】:

  • 我认为这种格式化方式比较好。如果您不这么认为,请随意回滚。
  • 它确实看起来更好。
  • 虽然,我仍然不确定您要做什么。您的输入字符串为 "hello "" there""hello """" there" 并希望输出分别为 hello " therehello "" there 或?
  • 正则表达式不必对字符串进行转义,我可以稍后再做,但是我需要匹配整个字符串。我当前的模式在点击双“时停止匹配,而它应该一直持续到第一个没有加倍的”。
  • 如果是""",您会期待什么?能不能先匹配字符串再替换引号?

标签: python regex string escaping


【解决方案1】:
regex = re.compile(r'"(?:[^"]|"")*"')

这只是找到文字,它不会通过替换双引号来解码它们。

【讨论】:

    【解决方案2】:

    没有使用正则表达式,但您已经指定了 Python,所以这里有一种方法可以获得您的预期输出:

    >>> import csv
    >>> strings = ['"some string"', '"hello "" there"', '"hello """" there"']
    >>> for s in strings:
        print next(csv.reader([s]))
    
    
    ['some string']
    ['hello " there']
    ['hello "" there']
    

    【讨论】:

      猜你喜欢
      • 2014-12-13
      • 2011-08-21
      • 2021-11-03
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多