在python中选择字符串中的数字组

在python中选择字符串中的数字组,python,string,list,split,Python,String,List,Split,我有一个字符串列表: str_list = ['123_456_789_A1', '678_912_000_B1', '980_210_934_A1', '632_210_464_B1'] 我基本上想要另一个列表: output_list = ['789', '000', '934', '464'] 它总是会是第三组数字,它们总是有一个\u a的\u B 到目前为止,我已经: import re m = re.search('_(.+?)_A', text) if m: found

我有一个字符串列表:

str_list = ['123_456_789_A1', '678_912_000_B1', '980_210_934_A1', '632_210_464_B1']
我基本上想要另一个列表:

output_list = ['789', '000', '934', '464']
它总是会是第三组数字,它们总是有一个
\u a
\u B

到目前为止,我已经:

import re

m = re.search('_(.+?)_A', text)
if m:
    found = m.group(1)

但我总是得到这样的东西:
456\u789

只需使用简单的列表理解就可以了

ans = [i.split("_")[-2] for i in lst]

只需使用简单的列表理解就可以了

ans = [i.split("_")[-2] for i in lst]

如果只希望匹配后跟下划线和大写字符的数字,则可以匹配这些数字并直接在右侧断言下划线和大写字符

要仅匹配A或B,请使用
[AB]
或使用
[A-Z]
匹配该范围

\d+(?=_[AB])

可以使用查找字符串中的第一个匹配项

import re

str_list = ['123_456_789_A1', '678_912_000_B1', '980_210_934_A1', '632_210_464_B1']
str_list = [re.search(r'\d+(?=_[AB])', s).group() for s in str_list]
print(str_list)
输出

['789', '000', '934', '464']
或者使用捕获组版本,匹配之前的
\uu
,以及更精确一点的模式,您还希望匹配领先的
\u

str_list = [re.search(r'_(\d+)_[AB]', s).group(1) for s in str_list]

如果只希望匹配后跟下划线和大写字符的数字,则可以匹配这些数字并直接在右侧断言下划线和大写字符

要仅匹配A或B,请使用
[AB]
或使用
[A-Z]
匹配该范围

\d+(?=_[AB])

可以使用查找字符串中的第一个匹配项

import re

str_list = ['123_456_789_A1', '678_912_000_B1', '980_210_934_A1', '632_210_464_B1']
str_list = [re.search(r'\d+(?=_[AB])', s).group() for s in str_list]
print(str_list)
输出

['789', '000', '934', '464']
或者使用捕获组版本,匹配之前的
\uu
,以及更精确一点的模式,您还希望匹配领先的
\u

str_list = [re.search(r'_(\d+)_[AB]', s).group(1) for s in str_list]

为什么不直接使用
split('''u'[2]
[x.split(''u'[2]表示stru列表中的x]
?您可以映射列表,从这个模式中获取值
\d+(?=[A-Z])
您可以尝试使用这个正则表达式
\d+(?=\A | B)
r”(\d+)[AB]
,与您的团队一起使用
split split为什么不直接使用
split split呢对于str_列表中的x]
?您可以映射列表,从该模式中获取值
\d+(?=[A-Z])
您可以使用组方法尝试此正则表达式
\d+(?=\u A | B)
r”(\d+)[AB]