我有一个字符串。我想提取子字符串,该子字符串以数字开头,并以该子字符串中的数字结尾。
我的字符串是"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 =我得到的整个字符串。
答案 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)
输出:/
答案 2 :(得分:0)
如果您想从更长的字符串中获得一个以整个单词的第一个数字开头,以一个整数作为最后一个结尾的子字符串,则可以使用
r'\b\d+\b.*\b\d+\b'
详细信息
\b\d+\b
-单词边界,数字和单词边界(不允许在数字前后使用数字,字母或下划线).*
-任意0个以上的字符(无re.DOTALL
或re.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。