【问题标题】:Regex : matching integers inside of brackets正则表达式:匹配括号内的整数
【发布时间】:2020-05-04 17:14:52
【问题描述】:

我正在尝试去掉 version = 10.9.8[35] 等字符串的括号末端。我正在尝试用括号模式替换整数 (所以所有 [35],包括括号)使用正则表达式 [\[+0-9*\]+] 的空字符串,但这也与不被括号包围的数字匹配。我没有正确使用 + 量词吗?

【问题讨论】:

  • 您是否也想用一种语言进行标记 - 因为这可能存在细微差别。
  • 某些语言(例如 Java)也有字符串替换 - 所以你可以转换做类似 s = s.replace("[","").replace("]","") ;与 Python w3schools.com/python/ref_string_replace.asp 相同
  • 这是否也会删除任意数量的间歇性数字?
  • 刚刚运行,我还需要将括号内的整数分出来

标签: python regex


【解决方案1】:

您可以匹配数字的格式,然后匹配方括号之间的一位或多位数字。

在替换中使用第一个捕获组r'\1'

\b([0-9]+(?:\.[0-9]+)+)\[[0-9]+\]
  • \b字边界
  • (捕获组1
    • [0-9]+ 匹配 1+ 位
    • (?:\.[0-9]+)+ 匹配 . 和 1+ 位并重复 1 次或更多次
  • )关闭群
  • \[[0-9]+\] 匹配方括号之间的 1+ 个数字

Regex demo

例如

import re

regex = r"\b([0-9]+(?:\.[0-9]+)+)\[[0-9]+\]"
test_str = "version = 10.9.8[35]"
result = re.sub(regex, r'\1', test_str)
print (result)

输出

version = 10.9.8

【讨论】:

    【解决方案2】:

    不需要正则表达式

    s =  '10.9.8[35]'
    t = s[:s.rfind("[")]
    print(t)
    

    但如果你坚持;-)

    import re
    s =  '10.9.8[35]'
    t = re.sub(r"^(.*?)[[]\d+[]]$", r"\1", s)
    print(t)
    

    正则表达式的分解:

    • ^ - 以
    • 开头
    • () - 捕获您想要保留的第 1 组
    • .*? - 任意数量的字符(非贪婪)
    • [[] - 开幕[
    • \d+ 1+ 位
    • []] - 关闭]
    • $ - 以
    • 结尾
    • \1 - 捕获组 1 - 用于替换正则表达式替换的一部分。您想保留的部分。

    两种情况下的输出:

    10.9.8
    

    使用regex101.com 更熟悉自己。如果您单击网站右下角的任何正则表达式示例,它将为您提供更多信息。您也可以使用它来生成多种语言的正则表达式代码。 (不过对 Java 不好!)。

    Youtube by PyMoondra 上还有一系列精彩的 Python 正则表达式视频。

    【讨论】:

      【解决方案3】:

      更简单的正则表达式解决方案:

      import re
      pattern = re.compile(r'\[\d+\]$')
      s = '10.9.8[35]'
      r = pattern.sub('', s)
      print(r) # 10.9.8
      

      该模式匹配字符串末尾的方括号,其中包含一个或多个数字。然后 sub 用空字符串替换方括号和数字。

      如果您想使用方括号中的数字,只需更改 sub 表达式,例如:

      import re
      pattern = re.compile(r'\[(\d+)\]$')
      s = '10.9.8[35]'
      r = pattern.sub(r'.\1', s)
      print(r) # 10.9.8.35
      

      或者如另一个答案所说,您可以找到它并拼接以摆脱它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-13
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多