【问题标题】:Regular Expression to remove a specific word which is not followed by a space正则表达式删除后面没有空格的特定单词
【发布时间】:2023-02-23 13:39:33
【问题描述】:

居家办公

于 2023 年 02 21 13 08 31 停止

持续时间 01 50 56

参加人数 1

参加者

我有这个问题陈述,我想删除新行上的 PARTICIPANTS,但这样做会删除其他 PARTICIPANTS,即“NUMBER OF PARTICIPANTS 1”这个。我不想要那个。

我尝试了很多正则表达式,但未能找到所需的输出。要么他们两个都被删除,要么一个都不删除。

非常感谢您的帮助。

先感谢您

【问题讨论】:

  • 你可能对regex lookarounds感兴趣。对于您的特定情况,您可能需要对空格进行否定的前瞻性检查。
  • new_str3 = re.sub("(?<!\s){PARTICIPANTS}","",new_str2) 我用过这个还是不行。
  • 这是一个消极的后视,它在错误的位置寻找
  • 也许re.sub(r"(?m)^PARTICIPANTS$", "", your_str)
  • @Unmitigated 谢谢伙计,它奏效了。你能简单介绍一下这个 (?m) 是什么意思吗?

标签: python regex


【解决方案1】:

您可以使用多行标志,以便 ^$ 锚点在每行的开头和结尾匹配。这样,您可以仅在字符串“PARTICIPANTS”在其自己的行上时才替换它。

re.sub(r"(?m)^PARTICIPANTS$", "", your_str)

【讨论】:

    【解决方案2】:

    使用正则表达式否定先行,您可以指定前面没有空格。

    import re
    
    #The (
    )? lets it match and remove the 
     newline marker behind the detected word if it is present, remove that if you want to keep the newline.
    regex = r"(
    )?PARTICIPANTS(?!s)"
    string = "WFH
    STOPPED AT 2023 02 21 13 08 31
    DURATION 01 50 56
    NUMBER OF PARTICPANTS 1
    PARTICIPANTS"
    
    new_string = re.sub(regex, "", string)
    
    #result of new_string
    'WFH
    STOPPED AT 2023 02 21 13 08 31
    DURATION 01 50 56
    NUMBER OF PARTICPANTS 1'
    

    【讨论】:

    • 它不工作。
    • 你能详细说明一下吗?
    • 在我的情况下它什么也没做。我的字符串是原样。
    • 你能包括你正在处理的字符串以便我可以测试它吗?
    • 或者更好的是您正在使用它的代码片段,因为可能还有其他需要处理的问题。
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多