【问题标题】:Matching pattern using reg ex and re.sub使用正则表达式和 re.sub 匹配模式
【发布时间】:2020-10-24 04:41:35
【问题描述】:

我正在尝试从某些数据中删除以下模式,但结果好坏参半。

--endof["somerandomtext"]

基本上,文本总是以--endof[" 开头并以"] 结尾,中间的单词会发生变化。
我正在使用的那行代码目前无法正常工作。

d = re.sub('--+([a-zA-Z0-9_"-\[]*)+\]', " ", d)

我是尝试使用 re.sub 或任何方法解析数据的新手。我一直在猜测如何尝试使这条线正常工作,我可能有什么问题导致我出现问题。

任何帮助表示赞赏。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    要删除以--endof[" 开头并以"] 结尾的文本,您应该将它们作为精确字符匹配,并匹配中间的子字符串。

    因为[] 在正则表达式中具有特殊含义,您需要使用\ 将它们转义(正如评论中正确说明的那样,] 不必在这里转义,留下它转义为更加清晰)。

    在此示例中,中间的子字符串由一个或多个字母和数字组成(因此为+)。可以根据需要进行更改。

    str = re.sub('--endof\["[a-zA-Z0-9]+"\]', "", str)
    

    为了进一步分解 -

    --endof 完全匹配这些字符。
    \[ 匹配字符 [
    " 匹配字符 "
    [a-zA-Z0-9]+ 匹配由一个或组成的字符串更多的字母和数字(+ 表示“一个或多个”)。
    " 再次匹配字符 "
    \] 匹配字符 ](并且可以指定为 @ 987654340@单独)。

    【讨论】:

    • ] 前面不需要加反斜杠。除非是范围的一部分,否则它不是特殊字符。
    • @DYZ 是的。它有助于清晰。
    • 感谢您的回复。我不知道为什么,但上面的代码行并没有完全删除注释。
    • @XenPanda 我想这取决于括号内的字符。正如@DYZ 的回答一样,[^]] 可用于获取不是] 的任何内容,这非常具有包容性,可能是您需要的。
    • 可能是这样,我认为那里可能有 - 某处,因此可能导致它失败。错误报告对于找出失败的原因并不是很有帮助……至少对我而言。
    【解决方案2】:

    @Hexagon 答案的变体:

    s = re.sub('--endof\[[^]]+]', '', s)
    

    这会删除以--endof[ 开头的字符串,后跟任意数量的非]s ([^]]+),后跟]。适用于任何不包含右括号的文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多