如何使用正则表达式提取字母数字字符串或字符串?

问题描述 投票:0回答:1

我想提取字母数字字符串和仅字母字符串的第一个实例。我在下面提供了一些示例,以便更好地解释我希望实现的目标。提前谢谢大家!

例如 string =“123456 字母数字 12 个字 7890 后续字符串”

string2 =“字母数字12字7890后续字符串”

string3 =“123456 字母数字 12 个单词”

上面所有的例子都应该输出: 预期输出=“字母数字12字”

我已经尝试过,但我得到的最接近的是所有字母数字和字符串的列表,这不是我想要的。

这是我的代码:

re.findall(r”(?i)\d?(?:[a-z]+[0-9]+|[0-9]+[a-z]+|[a-z]+)\d?”,string)

python regex
1个回答
0
投票

假设您正在寻找匹配的子字符串,这些子字符串是字母数字字符的单词字符串,由空格分隔,并且都不以数字开头,一个简单的解决方案是:

import re

examples = [
    '123456 Alphanumeric12 word 7890 Subsequent String',
    'Alphanumeric12 word 7890 Subsequent String',
    '123456 Alphanumeric12 word'
]

for s in examples:
    print(re.findall('(?:[a-zA-Z]\w*\s*)+', s))

输出:

['Alphanumeric12 word ', 'Subsequent String']
['Alphanumeric12 word ', 'Subsequent String']
['Alphanumeric12 word'] 

请注意,这确实包括字符串中字符串后面的空格,但可以使用

.strip()
轻松消除它。如果您只需要第一场比赛,则不需要使用
.findall()

此外,如果您不介意使用较重的正则表达式,而赞成使用

.strip()
,那么这是有效的:

for s in examples:
    print(re.findall(r'\b[a-zA-Z]\w*(?:\s+\b[a-zA-Z]\w*)*', s))
© www.soinside.com 2019 - 2024. All rights reserved.