正则表达匹配,但没有评论

时间:2018-02-07 23:12:34

标签: python regex

给定文件:

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.7D59SE5C620.86B.00.01等。 试试

\s*;+

但它没有用,也许我需要继续前进。正则表达式的新功能所以不要。

请帮忙

2 个答案:

答案 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标志的行)
  • [^;]* - 除;
  • 以外的0个字符
  • [^\s;] - 除空格以外的字符;

请参阅Python online demo

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