【问题标题】:What should be the regex pattern for this?这应该是什么正则表达式模式?
【发布时间】:2021-07-16 15:26:54
【问题描述】:

我只想提取整个部分 - "value":["10|8.0|1665|82|apple|#||0","8|1132|188.60|banana|#||0 "] 从文本文件的所有行中提取,然后写入另一个文本文件。这部分在每一行都有不同的值。

我已经编写了这个正则表达式模式,但无法将这些整个部分放在另一个文本文件中。

with open("result.txt", "w+") as result_file:
     with open("log.txt", "r") as log-file:
         for lines in log-file:
            all_values= re.findall(r'("value"+:"[\w\.#|-]+")', lines)
            for i in all_values:
                result_file.write(i)

【问题讨论】:

  • 小问题:value 的值是值的列表还是仅仅是 value 的值可以是什么的一个例子?
  • 你的意思是像"value":\[".*?"] 吗? regex101.com/r/lcL0zM/1 或将缺少的字符添加到字符类 "value":\["[\w\.#|",-]+"] regex101.com/r/KSyID7/1
  • 是的,它的值列表@ThomasKlinger
  • "value":[".*?"] - 这行得通,谢谢。 @Thefourthbird

标签: python python-3.x regex logging


【解决方案1】:

在您的模式中,您可以省略捕获组的外括号以仅获取匹配项。

这部分 "+ 匹配 1 次或多次似乎不需要的双引号。

你没有得到完整的匹配,因为字符串中的字符比字符类[\w\.#|-]+中列出的字符多

作为更广泛的匹配,您可以使用

"value":\[".*?"]
  • "value": 匹配字面意思
  • \["匹配["
  • .*? 尽可能少匹配任何字符
  • "] 匹配"]

Regex demo

【讨论】:

  • 嘿,谢谢你的解释,现在更容易理解了。
猜你喜欢
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2022-06-29
  • 2012-01-26
相关资源
最近更新 更多