簡體   English   中英

正則表達式將鍵/值與空格分隔符匹配,沒有前導/尾隨空格,AND 值可以有空格

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

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