如何使用正则表达式提取第二个字符串(空格之后)?

2024-09-30 10:33:00 发布

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

我有一个返回如下数据的代码:

['WKU  D02807750\n', 'WKU  D02807769\n', 'WKU  D02807777\n', 'WKU  D02807785\n']

我想在创建列表的循环中使用regex,如下所示:

import re
pat_nos = []
for line in open('file.txt'):
 if pat_no in line:
 pat_nos.append(line)
print(pat_nos)

所以它会返回一个如下列表:

['D02807750', 'D02807769', 'D02807777', 'D02807785']

我知道在追加时需要在“行”上使用regex,但我不确定如何使用regex在文本后面的最后一个空格(WKU后面可能有1到2个空格)之间拆分所有内容,但我想要的东西总是以字母数字字符开头,总是以换行结束


Tags: 数据代码inimport列表lineregex空格
3条回答

因为你想用正则表达式

import re
l = ['WKU  D02807750\n', 'WKU  D02807769\n', 'WKU  D02807777\n', 'WKU  D02807785\n']
newList = []
search = '\\s(D\\d*)'
for thing in l:
    answer = re.search(search,thing)
    newList.append(answer.group(1))
print(newList)

如果保证它始终是字符串中的最后一个子字符串,则只需使用split(),例如:

lst = ['WKU  D02807750\n', 'WKU  D02807769\n', 'WKU  D02807777\n', 'WKU  D02807785\n']
result = [x.split()[-1] for x in lst]

输出:

['D02807750', 'D02807769', 'D02807777', 'D02807785']

如果不能保证它是最后一个子字符串,并且您希望使用regex,则可以使用以下命令:

import re
lst = ['WKU  D02807750\n', 'WKU  D02807769\n', 'WKU  D02807777\n', 'WKU  D02807785\n']
result = [re.search(r'(\w\d+)\n', x).group(1) for x in lst]

输出:

['D02807750', 'D02807769', 'D02807777', 'D02807785']

只需使用str.split()和最后一个元素构建一个列表理解

l = ['WKU  D02807750\n', 'WKU  D02807769\n', 'WKU  D02807777\n', 'WKU  D02807785\n']

print([x.split()[-1] for x in l])

请注意,linefeed被忽略,因为split是在没有参数的情况下调用的:根据1个或多个空格字符(制表符、空格、换行符…)进行拆分

结果:

['D02807750', 'D02807769', 'D02807777', 'D02807785']

(使用regex这样做更复杂:[re.split(" ",x)[-1].strip() for x in l],因为regex split不会删除空字段)

编辑:如果您想返回所有第一项,则需要另一种技术。你可以split()然后join()

[" ".join(x.split()[1:]) for x in l]

或者限制split操作的数量(之后需要strip):

[x.split(maxsplit=1)[-1].strip() for x in l]

或者可以使用partition根据找到的第一个空格进行拆分,然后使用strip()结果删除前导空格和尾随空格:

[x.partition(" ")[2].strip() for x in l]

l = ['WKU D 02807750\n', 'WKU D 02807769\n', 'WKU D02807777\n', 'WKU D02807785\n'] 你得到['D 02807750', 'D 02807769', 'D02807777', 'D02807785']

相关问题 更多 >

    热门问题