需要帮助regex来解析表达式

时间:2011-05-06 20:56:32

标签: c# regex

我有一个表达式:

((((the&if)|sky)|where)&(end|finish))

我需要的是在符号和单词之间加一个空格,使其最终如下:

( ( ( ( the & if ) | sky ) | where ) & ( end | finish ) )

我提出的正则表达式是(\w)*[(\&*)(\|*)],它只能让我:

( ( ( ( the& if) | sky) | where) & ( end| finish) )

我可以从居住的正则表达大师那里获得一些帮助吗?我将在C#中使用它。

4 个答案:

答案 0 :(得分:2)

编辑:由于您使用的是C#,请尝试以下操作:

output = Regex.Replace(input, @"([^\w\s]|\w(?!\w))(?!$)", "$1 ");

在符合以下条件的任何字符后插入空格:

  • 既不是字母,数字,下划线或空格
    • OR是一个单词字符,后面没有其他单词字符
  • AND不在一行的末尾。

答案 1 :(得分:2)

resultString = Regex.Replace(subjectString, @"\b|(?<=\W)(?=\W)", " ");

<强>解释

\b      # Match a position at the start or end of a word
|       # or...
(?<=\W) # a position between two
(?=\W)  # non-word characters

(并用空格替换)。

答案 2 :(得分:1)

你可以在每个单词之后和每个非单词字符之后添加一个空格(所以寻找\W|\w+并用匹配和空格替换它。例如在Vim中:

:s/\W\|\w\+/\0 /g

答案 3 :(得分:1)

您可以使用:

(\w+|&|\(|\)|\|)(?!$)

表示单词,&符号,(符号,)符号或|符号后面没有字符串的结尾;然后用匹配+空格符号替换匹配。通过使用c#,可以这样做:

var result = Regex.Replace(
                 @"((((the&if)|sky)|where)&(end|finish))", 
                 @"(\w+|&|\(|\)|\|)(?!$)", 
                 "$+ "
             );

现在result变量包含一个值:

( ( ( ( the & if ) | sky ) | where ) & ( end | finish ) )