簡體   English   中英

python正則表達式也可以使用換行符來查找值

[英]python regex find values with newline character also

我正在研究這個我無法解決的正則表達式問題。 我做的正則表達式

import re
message = """[key    X] value
[key    X]  value value
[key    X]  value
value
value
value
[key     ] value
[key     ] ?
[key     ] ?"""

messageRegex = re.compile(r"\[(.*?)][\s](.*)")

for value in messageRegex.findall(message):
    print(value)

對此的輸出如下所示,並非所有內容都被捕獲。

('key    X', 'value') ('key\tX', 'value value') ('key\tX', 'value')
('key\t ', 'value') ('key\t ', '?') ('key\t ', '?')

在此輸入圖像描述

我希望輸出看起來像

('key    X', 'value') ('key\tX', 'value value') ('key\tX', 'value \nvalue \nvalue \nvalue')
('key\t ', 'value') ('key\t ', '?') ('key\t ', '?')

你可以用

(?m)^\[([^][]*)]\s+(.*(?:\n(?!\[[^][]*]).*)*)

請參閱正則表達式演示

細節

  • ^ - 開始一行
  • \\[ - [
  • ([^][]*) - 第1組: []以外的任何0+字符
  • ] - a ] char
  • \\s+ - 1+個空格
  • (.*(?:\\n(?!\\[[^][]*]).*)*) - 第2組:
    • .* - 其余部分
    • (?:\\n(?!\\[[^][]*]).*)* - 零次或多次重復:
      • \\n(?!\\[[^][]*]) - 沒有后跟[...]子串的換行符
      • .* - 其余部分

Python演示

import re
message = """[key    X] value
[key    X]  value value
[key    X]  value
value
value
value
[key     ] value
[key     ] ?
[key     ] ?"""

messageRegex = re.compile(r"^\[([^][]*)]\s+(.*(?:\n(?!\[[^][]*]).*)*)", re.M)

for value in messageRegex.findall(message):
    print(value)

輸出:

('key    X', 'value')
('key    X', 'value value')
('key    X', 'value\nvalue\nvalue\nvalue')
('key     ', 'value')
('key     ', '?')
('key     ', '?')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM