我想提取字母数字字符串和仅字母字符串的第一个实例。我在下面提供了一些示例,以便更好地解释我希望实现的目标。提前谢谢大家!
例如 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)
假设您正在寻找匹配的子字符串,这些子字符串是字母数字字符的单词字符串,由空格分隔,并且都不以数字开头,一个简单的解决方案是:
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))