我想从python中的文本数据中提取带有标签的字符串。我编写了以下代码,但是这会用字符串替换实际数据,我想提取
My name is ali, Date is 21/08/2018 Total amount is euros 10 . Account number is 123456
我有以下文字作为输入:
> 21/08/2018: DATESTR
euros 10 : MONEYSTR
123456 : NUMSTR
Expected_output是:
{{1}}
我如何获得以上输出
有什么想法吗?
答案 0 :(得分:2)
您可以在之前添加.*?
之前和.*
之后添加r'\1 : DATESTR'
res = re.sub(r'.*?(\d{1,31}(?::? |[-/])\d{1,12}(?::? |[-/])\d{4}).*', r'\1 : DATESTR', s)
请参阅regex demo。使用.*?
,您可以尽可能少地使用除换行符之外的任何0 +字符匹配,并且使用.*
匹配除换行符之外的任何0 +字符,尽可能多,并且只需匹配即可删除不需要的内容,并保留捕获的内容。
您也可以使用正则表达式提取日期,然后将: DATESTR
附加到其中:
import re
rx = r"\d{1,31}(?::? |[-/])\d{1,12}(?::? |[-/])\d{4}"
s = "My name is ALi Date is 09/03/2018"
m = re.search(rx, s)
if m:
print("{} : DATESTR".format(m.group())) # => 09/03/2018 : DATESTR
请参阅Python demo。
答案 1 :(得分:0)
您可以试试datefinder
在这里,我试图用它完成你的例子:
>>> import datefinder
>>> str = 'My name is ALi Date is 09/03/2018'
>>> matches = datefinder.find_dates(str)
>>> for i in matches:
... print(i.strftime("%m/%d/%Y") + ':DATESTR')
...
09/03/2018:DATESTR
我想这会对你有所帮助。它可以从你的字符串中获取任何日期字符串。
答案 2 :(得分:0)
从你的例子中你想要做两件事:
我在这里提出的解决方案可能不是最好的,但确实如此。我建议你得到正则表达式可以找到的匹配,然后使用该匹配格式化你想要打印的内容。
import re
string1 = "My name is ALi Date is 09/03/2018"
string2 = "DATESTR"
m = re.search("(\d{1,31}(:? |\-|\/)\d{1,12}(:? |\-|\/)\d{4})", string1 ) # match the date : dd/mm/yyyy
print( m.group(0) + ' : ' + string2 )
输出结果为:
>>> 09/03/2018 : DATESTR
在文档中可能还有一些其他功能符合您的需求。这就是我刚用过的东西。