[英]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.