在带有regex python列表的列表中返回匹配项

2024-05-14 14:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,如果一个单词的字母部分超过3个字母,我想存储在一个列表中。我需要把“hour”和“lalal”存储到一个列表中。 我为alpha数字和数字alpha序列编写了一个regex模式,如下所示。你知道吗

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)

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

编辑:另一个例子是 我一小时后到 这个的输出应该是['hour']


Tags: 字符串alpha列表foris字母模式序列
1条回答
网友
1楼 · 发布于 2024-05-14 14:35:19

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

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

说明:

  • ([a-zA-Z]{4,})-捕获长度为4或更多的字母数字文本并存储在group1中
  • -\d+-确保它后跟连字符和一个或多个数字
  • |-交替,因为有两种情况
  • \d+--匹配一个或多个数字和连字符
  • ([a-zA-Z]{4,})-捕获长度为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']

相关问题 更多 >

    热门问题