【问题标题】:Removing certain strings from text with a specific format从具有特定格式的文本中删除某些字符串
【发布时间】:2022-11-11 19:19:14
【问题描述】:

我想要做的是删除我正在使用的文本中随机弹出的某些日期字符串,格式如下:14 Sept 2021 但日、月和年是动态的,因此可以更改。

我试过的是:

    def clean_up_answer(answer):
        date_pattern = re.search("(\d{2}[.]+\d{4}[.]+\d{4})", answer)
        if date_pattern is not None and date_pattern != 'None':
            answer = re.sub('(\d{2}[.]+\d{4}[.]+\d{4})', '', answer)
            return answer.strip()
        else:
            return answer.strip()

我认为正则表达式最适合这个,但我的正则表达式不稳定,从我可以看到上面的代码看起来不错,但显然没有删除特定的字符串,任何帮助将不胜感激。

【问题讨论】:

  • 您仅使用digitsdots`` but 2021 年9 月14 日` 搜索字符串具有没有数字的字符串Sept。您还必须搜索字母[A-Za-z]Sept|May|April 之类的单词,以及元素之间的空格。也许您应该创建许多分离的正则表达式并在for-loop 中检查它们

标签: python regex


【解决方案1】:

跟进 furas 所说的你需要在脚本中容纳月份文本。

您也不需要检查要替换的模式是否在字符串中。 re.sub() 如果在字符串中找不到匹配的模式,将不会在您的字符串中进行任何替换。

import re

def clean_up_answer(answer):
    answer = re.sub('d+sw+sd+', '', answer)
    return answer.strip()

test_string = "Today's date is 11 Nov 2022"

print(clean_up_answer(test_string))
# Today's date is

如果存在,上面的代码将进行替换。正则表达式是 d+ 表示日期的数字,s 表示空格,w+ 表示月份的文本,s 表示第二个空格,d+ 表示年份。请注意,通过使用 + 符号,我们还可以适应年份为 2 位或 4 位(22 与 2022)以及日期为 1 位或 2 位(09 与 9)的情况。

希望这可以帮助!

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 2017-04-25
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多