在python中仅使用正则表达式拆分第一组字符串

2024-06-25 22:31:09 发布

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

我想搜索一个特定的字符串,有人能告诉我为什么我看到下面的结果吗? 我在一个在线regex网站上查看了它,似乎我已经分成了3组,现在结果是打印了3组。我怎么只能把第一组分开

是否可以更改代码,以便检测小写的“字符串”

相对字符串

DD-JSH-String43423213-3774
DE-String43423214-SDC-3721

输出:

'String43423213', 'String', '43423213','String43423214', 'String', '43423214'

代码:

matches = re.findall(r'((String)(\d+))', inp)
matches = [j for sub in matches for j in sub if j != ""]

预期结果:

'String43423213', 'String43423214'

Tags: 字符串代码inforstring网站dedd
3条回答

试试这个regex-demo

python源代码:

input="""DD-JSH-String43423213-3774
DE-String43423214-SDC-3721"""
matches = re.findall(r'String\d+', input, flags=re.I)
print(matches)

matches = re.findall(r'(?i)String\d+', input)
print(matches)

输出:

['String43423213', 'String43423214']

说明: 由于正则表达式有两个组String\d+re.findall返回一个列表,其中包含两个组的所有元组,如('String', 'String43423214')。您可以像(String\d+)或像String\d+一样对它进行分组,这两个表达式都有效

您可以这样做:

import re
inp = """
DD-JSH-String43423213-3774
DE-String43423214-SDC-3721
"""
matches = matches = re.findall(r'String\d+', inp)
for match in matches:
    print(match)

这是因为您甚至对这两个匹配项进行分组,因此必须删除外部组。您还可以添加标志re.I以忽略大小写:

matches = re.findall(r'(String)(\d+)', inp, flags=re.I)
print(*[''.join(x) for x in matches],sep="\n")

相关问题 更多 >