【问题标题】:return matches in a list with list of regex python在带有正则表达式 python 列表的列表中返回匹配项
【发布时间】:2019-02-20 04:48:14
【问题描述】:

如果单词的字母部分超过 3 个字母,我有一个字符串,我想将它存储在一个列表中。我需要将“小时”和“lalal”存储到列表中。 我为字母数字和数字字母序列编写了一个正则表达式模式,如下所示。

regex = ["([a-zA-Z])-([0-9])*","([0-9])*-([a-zA-Z])"]
tring = 'f-16  is 1-hour, lalal-54'
for r in regex:
    m = re.search(r,tring)
    d.append((m.group(0))
print(d)

但这显然给了我所有正在存储的字母数字模式。所以,我想我可以扩展它来计算每个模式中的字母并以不同的方式存储它。这可能吗?

编辑:另一个例子是 trig = 我会在 1 小时后到 并且这个输出应该是 ['hour']

【问题讨论】:

  • 请提供一个你迄今为止尝试过的例子,并解释什么不起作用。此外,如果您提供一个您认为输出应该是什么样子的示例,也会有所帮助。
  • 预期结果是什么?
  • 您能否提供更多给出的解决方案未捕获的示例
  • 我编辑添加了另一个可能更有意义的示例。这有帮助吗?
  • @Sue_ka:感谢您添加更多示例并澄清您的帖子。我已经更新了我的答案,希望这就是你想要的。如果您还需要其他任何内容,请告诉我。

标签: python regex python-3.x list


【解决方案1】:

因此,您只想捕获前面或后面有数字和连字符的字母数字文本。您可以使用此正则表达式,它使用交替来捕获这两种情况,

([a-zA-Z]{4,})-\d+|\d+-([a-zA-Z]{4,})

说明:

  • ([a-zA-Z]{4,}) - 捕获长度为 4 或以上的字母数字文本并存储在 group1 中
  • -\d+ - 确保后跟连字符和一个或多个数字
  • | - 有两种情况交替出现
  • \d+- - 匹配一个或多个数字和连字符
  • ([a-zA-Z]{4,}) - 捕获长度为 4 或以上的字母数字文本并存储在 group2 中

Demo

检查这个python代码,

import re

s = 'f-16  is 1-hour, lalal-54 I will be there in 1-hours'

d = []

for m in re.finditer(r'([a-zA-Z]{4,})-\d+|\d+-([a-zA-Z]{4,})',s):
 if (m.group(1)):
  d.append(m.group(1))
 elif (m.group(2)):
  d.append(m.group(2))

print(d)

s = 'f-16 is 1-hour, lalal-54'

arr = re.findall(r'[a-zA-Z]{4,}', s)
print(arr)

打印,

['hour', 'lalal', 'hours']

【讨论】:

  • 但是如果这里有更长的单词不是字母数字,那么这会给出错误的结果。我想找到每个字母数字模式的字母部分。
  • 感谢 Taurus 的编辑。我误读了捕获的单词应该是三个或更多,因为它超过了三个。
  • @Sue_ka:无论字符串多长或短,上述解决方案都将捕获三个以上的字母数字部分。也许我没有得到您要指出的内容。您能否在您的帖子和预期捕获中添加更多示例?这将有助于验证您在寻找什么。
猜你喜欢
  • 2021-10-12
  • 2016-03-25
  • 2023-03-24
  • 2020-12-02
  • 2018-01-08
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多