返回带有正则表达式python列表的列表中的匹配项

时间:2019-02-20 04:48:15

标签: python regex python-3.x list

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

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)

但这显然给了我所有正在存储的所有字母数字模式。因此,我认为我可以扩展此范围以计算每种模式中的字母并以不同的方式存储它。有可能吗?

编辑:另一个例子 tring =我会在1小时内到场 并且此输出应为['hour']

1 个答案:

答案 0 :(得分:0)

因此,您只想捕获字母数字文本(如果在数字前和后跟数字和连字符)。您可以使用此正则表达式使用正则表达式来捕获这两种情况,

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

说明:

  • ([a-zA-Z]{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']