【问题标题】:python re match exact only one occurrence (no repeat Consecutive)python重新匹配只出现一次(不重复连续)
【发布时间】:2018-08-13 17:32:11
【问题描述】:

我想要一个 python re 来匹配 / 的一次出现。确实,如果出现更多 / 例如 // 或 /// re 不应该匹配其中任何一个。

例如下面的输入必须转换:

a/b -> a b

a//b -> a//b

a/// -> a///b

【问题讨论】:

  • 使用r'^([^/]*)/([^/]*)$'进行匹配,然后使用r'\1 \2'进行替换
  • 以下任何解决方案对您有用吗?请投票/接受他们。

标签: python regex python-3.x


【解决方案1】:

你需要(消极的)环视:

(?<!\/)\/(?!\/)

Demo

此正则表达式匹配单个正斜杠,但前提是它前面或后面没有另一个斜杠。

【讨论】:

    【解决方案2】:

    您可以使用带有 2 个捕获组的正则表达式:

    r'^([^/]*)/([^/]*)$'
    

    RegEx Demo

    这个正则表达式:

    • ^:开始
    • ([^/]*):匹配 0 个或多个不是 / 的字符并在组 #1 中捕获
    • /:匹配一个/
    • ([^/]*):匹配 0 个或多个不是 / 的字符并在组 #2 中捕获
    • $:结束

    代码:

    import re
    str = re.sub(r'^([^/]*)/([^/]*)$', r'\1 \2', str)
    

    【讨论】:

      【解决方案3】:

      你可以使用模式:

      (?<=[a-z])\/(?=[a-z])
      
      • (?&lt;=[a-z]) 正面回看信件。
      • \/ 匹配 /
      • (?=[a-z]) 正向预读信函。

      re.sub 中的空字符串替换匹配的/

      在 Python 中:

      import re
      
      string = ['a/b','a//b','a///b']
      print(re.sub(r'(?<=[a-z])\/(?=[a-z])',r' ',str(string)))
      

      打印:

      ['a b', 'a//b', 'a///b']
      

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-04
        • 2016-09-21
        • 1970-01-01
        相关资源
        最近更新 更多