给定文件:
1.29.7D59 ; This field should not be edited
SE5C620.86B.00.01 ; This field should not be edited
I/O Sensitive ;Options: Balanced=00: I/O Sensitive=02
POR - Reg. Value:0x1F ;Options: 0.0%=00: 0.1%=01
待办事项:
1.29.7D59
SE5C620.86B.00.01
I/O Sensitive
POR - Reg. Value:0x1F
因此我需要提取1.29.7D59
,SE5C620.86B.00.01
等。
试试
\s*;+
但它没有用,也许我需要继续前进。正则表达式的新功能所以不要。
请帮忙
答案 0 :(得分:1)
\s*;+
仅匹配0 +空格字符,然后匹配1 + ;
个字符。如果您使用模式拆分单独的行,则抓住第一项:
import re
s='''1.29.7D59 ; This field should not be edited
SE5C620.86B.00.01 ; This field should not be edited
I/O Sensitive ;Options: Balanced=00: I/O Sensitive=02
POR - Reg. Value:0x1F ;Options: 0.0%=00: 0.1%=01'''
lines = s.split('\n')
res = []
for line in lines:
res.append(re.split(r'\s*;', line)[0])
print(res)
# => ['1.29.7D59', 'SE5C620.86B.00.01', 'I/O Sensitive', 'POR - Reg. Value:0x1F']
请参阅this Python demo。
或者,您可以使用以下正则表达式:
^[^;]*[^\s;]
请参阅regex demo。如果您将文件作为一个字符串阅读,则可能需要将其与re.MULTILINE
标记一起使用,或者(?m)^[^;]*[^\s;]
。
<强>详情
^
- 字符串的开头(或指定re.M
标志的行)[^;]*
- 除;
[^\s;]
- 除空格以外的字符;
。import re
s='''1.29.7D59 ; This field should not be edited
SE5C620.86B.00.01 ; This field should not be edited
I/O Sensitive ;Options: Balanced=00: I/O Sensitive=02
POR - Reg. Value:0x1F ;Options: 0.0%=00: 0.1%=01'''
print(re.findall(r'^[^;]*[^\s;]', s, re.M))
# => ['1.29.7D59', 'SE5C620.86B.00.01', 'I/O Sensitive', 'POR - Reg. Value:0x1F']
答案 1 :(得分:1)
您可以使用re.split
:
import re
s = """
1.29.7D59 ; This field should not be edited
SE5C620.86B.00.01 ; This field should not be edited
I/O Sensitive ;Options: Balanced=00: I/O Sensitive=02
POR - Reg. Value:0x1F ;Options: 0.0%=00: 0.1%=01
"""
final_data = '\n'.join([a for a, _ in [re.split('\s+(?=;)', i) for i in filter(None, s.split('\n'))]])
输出:
1.29.7D59
SE5C620.86B.00.01
I/O Sensitive
POR - Reg. Value:0x1F