【问题标题】:how to remove '18pieces' from '1903type18pieces' using regex?如何使用正则表达式从“1903type18pieces”中删除“18pieces”?
【发布时间】:2021-12-19 05:35:35
【问题描述】:

我想删除数字和后面的字符串直到句子结束,但不是句子开头的数字。

例如。从“1903type18pieces”中删除“18pieces”,而不是整个“1903type18pieces”,正确的代码可能类似于:

re.sub("(?<!\d+)\d.+?$", "", string)

但想不通

【问题讨论】:

    标签: regex python-2.7


    【解决方案1】:

    嗯,当然你可以...

        import re;
        print(re.sub("18pieces", "", "1903type18pieces"));
    

    但这很傻,正常替换就可以了。

    您尝试重新提出您的问题怎么样?

    【讨论】:

    • 仅供参考,您在 Python 中不需要分号(尽管它们是允许的)。
    • 感谢您的回复!我已经重新提出了我的问题。
    【解决方案2】:

    关于您尝试的模式的一些说明:

    Python re 不支持像(?<!\d+) 这样的后向断言中的量词。

    但是像这样,模式仍然会匹配它在字符串中遇到的第一个数字,因为后向断言不应该在左边有数字,这在字符串的开头也是如此。

    在这部分.+?$ 你可以省略 ?以防止回溯,因为该部分将匹配到字符串的末尾。此处使用+ 表示字符串至少应包含2 个字符


    您可以使用正向回溯断言左侧有一个数字或空白字符以外的字符,然后将一个数字与该行的其余部分匹配。

    (?<=[^\s\d])\d.*
    

    Regex demo

    import re
    
    text = "1903type18pieces"
    print (re.sub("(?<=[^\s\d])\d.*", "", text))
    

    输出

    1903type
    

    如果也可以直接在左侧声明换行符或空格,则可以使用:

    re.sub(r"(?<=\D)\d.*", "", text)
    

    【讨论】:

    • 我认为他们只需要re.sub(r"(?&lt;=\D)\d.*", "", text)(我不会使用string作为变量,因为它是Python中的一个单独模块)。
    • @WiktorStribiżew 您确实也可以这样做,但是我将不得不删除 re.M 对吗? regex101.com/r/ELi8yU/1
    • 我认为re.M 是多余的,问题中的字符串是单行的。
    猜你喜欢
    • 2019-02-16
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2014-07-24
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多