gpt4 book ai didi

python - 正则表达式以一致的顺序提取字符串的不同部分

转载 作者:太空狗 更新时间:2023-10-30 01:57:42 25 4
gpt4 key购买 nike

我有一个字符串列表

my_strings = [
"2002-03-04 with Matt",
"Important: 2016-01-23 with Mary",
"with Tom on 2015-06-30",
]

我要提取:

  • 日期(始终采用 yyyy-mm-dd 格式)
  • 人(总是和人在一起)但我不想保持“在一起”

我能做到:

import re
pattern = r'.*(\d{4}-\d{2}-\d{2}).*with \b([^\b]+)\b.*'
matched = [re.match(pattern, x).groups() for x in my_strings]

但它失败了,因为模式与 “with Tom on 2015-06-30” 不匹配。

问题

如何指定正则表达式模式,使其与日期或人物在字符串中出现的顺序无关?

如何确保 groups() 方法每次都以相同的顺序返回它们?

我希望输出看起来像这样?

[('2002-03-04', 'Matt'), ('2016-01-23', 'Mary'), ('2015-06-30', 'Tom')]

最佳答案

使用 2 个单独的正则表达式怎么样?

my_strings = [
"2002-03-04 with Matt",
"Important: 2016-01-23 with Mary",
"with Tom on 2015-06-30",
]
import re

pattern = r'.*(\d{4}-\d{2}-\d{2})'
dates = [re.match(pattern, x).groups()[0] for x in my_strings]

pattern = r'.*with (\w+).*'
persons = [re.match(pattern, x).groups()[0] for x in my_strings]

output = zip(dates, persons)
print output
## [('2002-03-04', 'Matt'), ('2016-01-23', 'Mary'), ('2015-06-30', 'Tom')]

关于python - 正则表达式以一致的顺序提取字符串的不同部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37123919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com