编辑:任何人都可以帮助我使用正则表达式来表示这样的字符串吗?:
[Header 1], [Head,er 2], Header 3
这样我就可以把它分成几块:
[Header 1]
[Head,er 2]
Header 3
我已经达到了这个目的:
(?<=,|^).*?(?=,|$)
哪会给我:
[Header 1]
[Head
,er 2]
Header 3
答案 0 :(得分:16)
在这种情况下,分隔符(逗号)比匹配标记(或块)更容易。识别分隔符的逗号需要相对简单的预测:
,(?=[^\]]*(?:\[|$))
每当你找到一个逗号时,你就会对三件事之一做一个预测。如果您首先找到一个结束方括号,则逗号位于一对括号内,因此它不是分隔符。如果您找到一个左括号或行/字符串的末尾,则它是一个分隔符。
答案 1 :(得分:6)
\[.*?\]
忘了逗号,你不关心它们。 :)
答案 2 :(得分:2)
之前已经讨论过这个问题的变化。
例如:
简短回答:正则表达式可能不是正确的工具。写一个合适的解析器。 FSM实现 easy 。
答案 3 :(得分:2)
(?<=,|^)\s*\[[^]]*\]\s*(?=,|$)
使用[
和]
分隔符为您带来优势
答案 4 :(得分:1)
这不是很简单吗?
(?<=,|^)(?:[^,]|\[[^[]*\])*
答案 5 :(得分:1)
您可以使用正则表达式来匹配括号内的值:
\[[^\]*]\]
或者您使用此正则表达式拆分括号列表(使用环视断言):
(?<=]|^)\s*,\s*(?=\[|$)