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