我希望从更长的字符串列表中删除日期,每个字符串可能包含也可能不包含日期。一个这样的字符串的示例可能是:
"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
你可以使用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之前,同时考虑了两个时间约定。