如何使用正则表达式python提取子字符串?

时间:2019-08-29 07:10:35

标签: python regex

我有一个字符串。我想提取子字符串,该子字符串以数字开头,并以该子字符串中的数字结尾。

我的字符串是"05/24/2019 04:33 PM 582 atm1.py"

我尝试了以下模式 ^\d.+\s+\d$

i="05/24/2019  04:33 PM               582 atm1.py"    
print(re.match("^\d.+\s+\d$",i))

预期o / p = "05/24/2019 04:33 PM 582" 实际的o / p =我得到的整个字符串。

3 个答案:

答案 0 :(得分:0)

一个非常敏感的模式:

print(re.match("\d+/\d+/\d+\s+\d+:\d+\s+PM\s+\d+",i).group(0))

或使用:

print(re.match(".+\s+",i).group(0))

输出:

05/24/2019  04:33 PM               582

答案 1 :(得分:0)

尝试以下正则表达式:"\d[\d\s:APM/]*\d"

import re

s = "05/24/2019  04:33 PM               582 atm1.py"
pattern = "\d[\d\s:APM/]*\d"
print(re.match(pattern, s).group(0))

正则表达式细目:  1. \d:十进制字符(0-9)  2. [\d\s:APM/]**表示方括号内的任意数量的字符。在方括号内,\d代表小数(0-9),\s代表空格,:APM/代表那些文字字符({{1}代表时间{{1 }}(上午和下午),:(日期)。  3. APM:十进制字符(0-9)

输出:/

Demo

答案 2 :(得分:0)

如果您想从更长的字符串中获得一个以整个单词的第一个数字开头,以一个整数作为最后一个结尾的子字符串,则可以使用

r'\b\d+\b.*\b\d+\b'

详细信息

  • \b\d+\b-单词边界,数字和单词边界(不允许在数字前后使用数字,字母或下划线)
  • .*-任意0个以上的字符(无re.DOTALLre.S标志,仅匹配非换行符)
  • \b\d+\b-单词边界,数字和单词边界(不允许在数字前后使用数字,字母或下划线)

在Python中,使用

import re
i="05/24/2019  04:33 PM               582 atm1.py"
m = re.search(r'\b\d+\b.*\b\d+\b', i)
if m:
    print(m.group()) # => 05/24/2019  04:33 PM               582

请参见Python demo