[英]Regex to match key/value with whitespace delimiter, without leading/trailing whitespace, AND value can have spaces
我需要將組件與基本上由鍵和值組成的文本行分開(分組)。
第一個完整的單詞是鍵,然后是任意數量的空格,然后在空格結束之后的所有其他內容都是值,包括更多的空格,但理想情況下不是尾隨空格。
鍵也可以有前導空格。
此外,值可能是 null,在這種情況下,字符串仍應與鍵的單個捕獲組匹配
例子
鍵:“鍵”
價值:“我是一個價值”
測試用例(下划線代表空格):
key
key___
___key___
key___I_am_a_value
__key___I_am_a_value
__key______I_am_a_value_______
在所有這些情況下,我希望得到兩個捕獲組,每個捕獲組都包含上面引號之間顯示的鍵和值,當值不存在時,第二組是 null
澄清一下,在這種情況下,我使用空格來指代空格和制表符,而不是換行符。
這似乎非常接近,除了它仍然在值中包含尾隨空格並且我不確定如何刪除它:
(?<key>\w+)(?:[ \t]*(?<value>.*))
作為突出這個問題的最后一個例子,使用上面和這個測試字符串(再次'_'=''):
____people_________john_jim_jen_josh____
我越來越
key: "people"
value: "john jim jen josh "
當我想要時:
key: "people"
value: "john jim jen josh"
這里的問題是.*
- 它只匹配到行尾。 像\S+
用於所有非空格或(?:[ \t]*[^ \t]+)*
到 go 成批的空格和非空格。 我認為您需要對這樣的尾隨空格獨占:
(?<key>\w+)[ \t]+(?<value>(?:[ \t]*[^ \t]+)*)
你可以使用
(?<key>\w+)(?!\S)[^\S\r\n]*(?<value>(?:\S+(?:[^\S\r\n]+\S+)*)*)
解釋
(?<key>\w+)
組鍵,匹配 1+ 個單詞字符(?!\S)
負前瞻,在右邊斷言一個空白邊界[^\S\r\n]*
匹配不帶換行符的可選空格(?<value>
組值
(?:
非捕獲組
\S+
匹配 1+ 個非空白字符(?:[^\S\r\n]+\S+)*
可選擇重復 1+ 個空格,不帶換行符,后跟 1+ 個非空白字符)*
關閉非捕獲組並可選擇重復)
關閉組值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.