通过将Regex转换为'Str'从Python中的字符串中删除日期

时间:2017-12-21 19:14:10

标签: python regex string python-3.x replace

我希望从更长的字符串列表中删除日期,每个字符串可能包含也可能不包含日期。一个这样的字符串的示例可能是:

"Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95"

我构建了一个返回错误的方法:

AttributeError: 'NoneType' object has no attribute 'match_object'

我的目标是在(\d+/\d+/\d+)上查找正则表达式匹配,然后将该匹配转换为字符串,以便它可以与.replace()一起使用。我似乎无法使用match_object解决此问题。

这是我的方法:

def replace_match(string):
    match=re.search(r'(\d+/\d+/\d+)',string)
    if match:
        match=re.match(r'(\d+/\d+/\d+)',string).match_object.group(0)
        print("match = " + match)
        string = string.replace(match, "")
    else:
        print("no match found")
    return string

我正在使用Python 3.6.3

1 个答案:

答案 0 :(得分:6)

您可以使用re.sub

import re
s = "Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95"
new_s = re.sub('\d+\/\d+\/\d+', '', s)

输出:

'Jane Doe 76554334  - 8:35 pm 700945 - SDFTRD $550.95'

编辑,删除时间戳:

import re
s = "Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95"
new_s = re.sub('\d+\/\d+\/\d+|\d+:\d+(?=\spm)|\d+:\d+(?=\sam)', '', s)

输出:

'Jane Doe 76554334  -  pm 700945 - SDFTRD $550.95'

时间戳删除正则表达式的说明:

\d+:\d+:匹配小时,然后分钟 (?=\sam):是一个积极的前瞻,这意味着\d+:\d+不会注册匹配,除非匹配的字符后跟一个空格,然后是am,指明它确实是一个时间戳。

\d+:\d+(?=\spm)与上面的内容相同,只是它正在检查时间匹配是否在pm之前,同时考虑了两种时间约定。