[英]Extract data if between substrings else full string
我有这样的字符串模式:
Beginning through June 18, 2022 at Noon standard time\n
Jan 20, 2022
Beginning through April 26, 2022 at 12:01 a.m. standard time
我想使用 python 正则表达式在“通过”之后和“at”字之前提取数据部分预设。
June 18, 2022
Jan 20, 2022
April 26, 2022
我可以使用 re group 提取长文本。
s ="Beginning through June 18, 2022 at Noon standard time"
re.search(r'(.*through)(.*) (at.*)', s).group(2)
但是它不适用于
s ="June 18, 2022"
任何人都可以帮助我。
您可以将此正则表达式与捕获组一起使用:
(?:.* through |^)(.+?)(?: at |$)
正则表达式详细信息:
(?:.* through |^)
:匹配后面跟" though "
或开始位置的任何内容(.+?)
:匹配任何字符的 1+ 并将其捕获到组 #1(?: at |$)
: 匹配" at "
或字符串结尾代码:
import re
arr = ['Beginning through June 18, 2022 at Noon standard time',
'Jan 20, 2022',
'Beginning through April 26, 2022 at 12:01 a.m. standard time']
for i in arr:
print (re.findall(r'(?:.* through |^)(.+?)(?: at |$)', i))
输出:
['June 18, 2022']
['Jan 20, 2022']
['April 26, 2022']
如何玩可选组和回溯。
^(?:.*?through )?(.*?)(?: at.*)?$
请参阅 regex101 上的此演示或 tio.run 上的Python 演示
请注意,如果仅存在一个子字符串,则它将从字符串的第一个到结尾匹配,或者从字符串的开头匹配到后者。 如果不存在,它将匹配完整的字符串。
另一个想法可能是使用支持分支重置组的PyPI 正则表达式。
^(?|.*?through (.+?) at|(.+))
如果两者都存在,则此部分提取,否则提取完整字符串。 Afaik regex
模块与 Python 的 regex 函数广泛兼容,只需使用import regex as re
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.