如何匹配regex直到第一个sp

2024-05-06 18:52:03 发布

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

is there any way to do [^\s] negate from the first space

我有下面的档案

server1 192.168.1.1  xx.xxx.xxx
server1 192.168.1.2  xx.sc.sss
server1 192.168.1.3  drf.xs.ffd
server2 192.168.1.1  .ssvfd
server2 192.168.1.2  sddfwe.ss
server2 192.168.1.3  kkl.ssdd.dd

我的代码

import re
file_= (r'C:\Users\mous\Desktop\test.txt')
[line for line in open(file_,'r',encoding='utf-8') if re.findall(r'server1 (\w+)',line)]

我的名字(不合适)

['server1 192.168.1.1  xx.xxx.xxx\n',
 'server1 192.168.1.2  xx.sc.sss\n',
 'server1 192.168.1.3  drf.xs.ffd\n']

我的第一个孩子出局了

['server1 192.168.1.1', 'server1 192.168.1.2', 'server1 192.168.1.3']

我的第二个孩子出局了

['192.168.1.1','192.168.1.2','192.168.1.3']


Tags: reisline孩子drffilexxxserver1
2条回答

注意你的[line for line in ...]。这个理解的结果中的元素将是完整的线条。你知道吗

使用regex只是为了过滤。你知道吗

幸运的是,re.findall可以获取整个文件并返回您想要的结果,而无需拆分为行,只需使用:

re.findall(r'(server1 (\w+))', open(file_,'r',encoding='utf-8').read())

为什么re?你知道吗

# from io  import StringIO

# s = '''server1 192.168.1.1  xx.xxx.xxx
# server1 192.168.1.2  xx.sc.sss
# server1 192.168.1.3  drf.xs.ffd
# server2 192.168.1.1  .ssvfd
# server2 192.168.1.2  sddfwe.ss
# server2 192.168.1.3  kkl.ssdd.dd'''

with StringIO(s) as f:
    for line in f:
        prts = line.split()
        if prts[0].endswith('1'):
            print(prts[1])

# 192.168.1.1
# 192.168.1.2
# 192.168.1.3

或者

...
    ...
        print(' '.join(prts[:2]))

# server1 192.168.1.1
# server1 192.168.1.2
# server1 192.168.1.3

相关问题 更多 >