我的代码返回的内容如下:
['WKU D02807750\n', 'WKU D02807769\n', 'WKU D02807777\n', 'WKU D02807785\n']
我想在创建列表的循环中使用正则表达式,如下所示:
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']
我知道我需要在" line"上使用正则表达式。当它被追加时,但我不确定如何使用正则表达式在文本之后的最后一个空格之间分割所有内容(在&#34之后可能有1或2个空格; WKU")但是我想要的东西总是以字母数字字符开头,它总是以换行符结尾
答案 0 :(得分:3)
使用str.split()
构建列表理解并获取最后一个元素
l = ['WKU D02807750\n', 'WKU D02807769\n', 'WKU D02807777\n', 'WKU D02807785\n']
print([x.split()[-1] for x in l])
请注意,由于在没有参数的情况下调用split
,因此会忽略换行:根据1个或多个空格字符(制表符,空格,换行符...)进行拆分
结果:
['D02807750', 'D02807769', 'D02807777', 'D02807785']
(使用正则表达式更复杂:[re.split(" ",x)[-1].strip() for x in l]
,因为正则表达式拆分不会删除空字段)
编辑:如果你想要返回但第一项,那么还需要另一种技术。您可以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']
答案 1 :(得分:2)
如果保证始终是字符串中的最后一个子字符串,则可以使用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']
如果不保证最后一个子字符串并且您想使用正则表达式,则可以使用以下内容:
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']
答案 2 :(得分:1)
因为你想使用RegEx,
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)