你沒有指定你正在使用的是什麼正則表達式引擎,但是如果你有前瞻/後顧之處,這個工程就可以工作。
它的工作原理是鍵只有全部大寫,而值不是 - 不知道這是否是一個有效的假設,但如果它不是那麼如指出的事情會變得複雜和混亂。
(?<=[+-\/])[A-Z]+=(?:(?![A-Z]+=)[^=])+(?=[+-\/]|$)
這裏是我試圖解釋(不知道有多少這是有道理的):
(?x) # enable regex comment mode
(?<=[+-\/]) # start with one of the delimiters, but excluded from match
[A-Z]+ # match one or more uppercase (for the key)
= # match the equal sign
(?: # start non-capturing group
(?! # start negative lookahead, to prevent keys matching
[A-Z]+= # a key and equals (since in negative lookahead, this is what we exclude)
) # end the negative lookahead
[^=] # match a character that's not =
)+ # end non-capturing group, match one or more times, until...
(?=[+-\/]|$) # next char must be delimiter or end of line for match to succeed
對於Java與字符串>正則表達式,反斜槓需要轉義(如果有的話):
Pattern p = Pattern.compile("(?<=[+-\\/])[A-Z]+=(?:(?![A-Z]+=)[^=])+(?=[+-\\/]|$)");
如果需要捕獲組,只需加括號一輪的適當部位:
Pattern p = Pattern.compile("(?<=[+-\\/])([A-Z]+)=((?:(?![A-Z]+=)[^=])+(?=[+-\\/]|$))");
的這一匹配的部分,把它變成新行分隔符的文本,就像...
Matcher m = p.Matcher(InputText);
StringBuffer Result = new StringBuffer("");
while (m.find())
{
Result.append(m.Group() + "\n");
}
當你的數據值可以包含你的分隔符時,正則表達式會大大地使情況複雜化。你對數據是如何控制的? – 2010-06-15 17:13:23
不幸的是,這些數據來自我無法控制的許多不同來源。 – 2010-06-15 17:15:16
可能更容易找到你正在尋找的密鑰,而不是分離器?尋找'用戶','組'和'功能'並解析相應的結果? – AllenG 2010-06-15 17:18:48