使用正则表达式在python中使用标签提取字符串

时间:2018-03-09 10:23:29

标签: python regex

我想从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}}

我如何获得以上输出

有什么想法吗?

3 个答案:

答案 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)

从你的例子中你想要做两件事:

  1. 查找类似日期的字符串
  2. 在比赛结束时添加另一个字符串
  3. 我在这里提出的解决方案可能不是最好的,但确实如此。我建议你得到正则表达式可以找到的匹配,然后使用该匹配格式化你想要打印的内容。

    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
    

    在文档中可能还有一些其他功能符合您的需求。这就是我刚用过的东西。

    https://docs.python.org/3/library/re.html