多个数据格式字符串的通用正则表达式

时间:2015-06-12 05:48:57

标签: c# regex

我有以下格式的数据。字符串可以是任何顺序,但一行中最多两个条目。 它也可以只有一个条目。我在过去的两天里努力为以下条件写一个正则表达式。

如果我使用空格数拆分字符串,则值将被拆分。 如果我将)分割为字符串,如果值在{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)

2 个答案:

答案 0 :(得分:2)

您需要使用可变宽度环视来检查多个空格是否不在括号内:

(?<!\([^)]*)\s+(?![^(]*\))

请参阅RegexStorm Demo

正则表达式说明:

  1. (?<!\([^)]*) - 一个负面的后视,检查空格是否前面没有开头()以外的可选字符数(即空格不是 (
  2. 之后
  3. \s+ - 在分割介意之后将被消耗并留在最终数组之外的空格,您可以将其限制为仅使用{{1} 空间如果要排除\p{Zs}匹配的制表符和其他空格符号,请使用简写Unicode类
  4. \s - 否定前瞻,确保在空白之后没有(?![^(]*\))以外的可选字符数,然后是((即没有)后)。
  5. 第1点和第3点确保我们检查空格的两边是否有括号。

    您可以将此正则表达式与)一起使用。

    Regex.Split()

    enter image description here

答案 1 :(得分:1)

试试这个正则表达式:

(\S+\([^\)]+\)|\S+(?!\())

Demo

\S+\([^\)]+\)匹配非空格,然后是一个开括号,然后是一个除了括号,然后是一个近括号的任何东西。

\S+(?!\())匹配非空格与开头括号的负前瞻。