我有以下格式的数据。字符串可以是任何顺序,但一行中最多两个条目。 它也可以只有一个条目。我在过去的两天里努力为以下条件写一个正则表达式。
如果我使用空格数拆分字符串,则值将被拆分。
如果我将)
分割为字符串,如果值在{1}}出现之前排在第1行或第2行,则字符串将不会被拆分。
有什么建议吗?
我定义了以下正则表达式,用于捕获字符串的不同部分。
)
但是,我无法构建与以下数据匹配的正则表达式。
注意:在下面显示的7行中,每一行都是输入字符串,而不是整个行。
\(([^)]+)\)
\(.+\)
被捕获为
VALUE1 PARAMETER(VALUE2)
VALUE3 PARAMETER(VALUE4 WITH SPACES)
PARAMETER(VALUE5) VALUE6
PARAMETER(VALUE7 WITH SPACES) VALUE8
PARAMETER(VALUE9 WITH SPACES) PARAMETER(VALUE10)
VALUE11 VALUE12
PARAMETER(VALUE13 WITH SPACES)
答案 0 :(得分:2)
您需要使用可变宽度环视来检查多个空格是否不在括号内:
(?<!\([^)]*)\s+(?![^(]*\))
正则表达式说明:
(?<!\([^)]*)
- 一个负面的后视,检查空格是否前面没有开头(
和)
以外的可选字符数(即空格不是 (
)\s+
- 在分割介意之后将被消耗并留在最终数组之外的空格,您可以将其限制为仅使用{{1} 空间如果要排除\p{Zs}
匹配的制表符和其他空格符号,请使用简写Unicode类\s
- 否定前瞻,确保在空白之后没有(?![^(]*\))
以外的可选字符数,然后是(
(即没有)
后)。第1点和第3点确保我们检查空格的两边是否有括号。
您可以将此正则表达式与)
一起使用。
Regex.Split()
答案 1 :(得分:1)
试试这个正则表达式:
(\S+\([^\)]+\)|\S+(?!\())
\S+\([^\)]+\)
匹配非空格,然后是一个开括号,然后是一个除了括号,然后是一个近括号的任何东西。
\S+(?!\())
匹配非空格与开头括号的负前瞻。