需要使用正则表达式解析表达式,求帮助。

4
我有一个表达式:
((((the&if)|sky)|where)&(end|finish))

我需要的是在符号和单词之间加一个空格,使其最终看起来像这样:
( ( ( ( the & if ) | sky ) | where ) & ( end | finish ) )

我想出来的正则表达式是(\w)*[(\&*)(\|*)],只能匹配到以下内容:

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

请问有没有熟悉正则表达式的专家可以帮忙一下?我会在C#中使用这个表达式。
4个回答

2

编辑:由于您正在使用C#,请尝试以下方法:

output = Regex.Replace(input, @"([^\w\s]|\w(?!\w))(?!$)", "$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

(并将其替换为空格。)

我发现这个网站在开发和测试正则表达式模式方面非常有帮助:http://www.myregextester.com/index.php - ShaneBlake
1
这将导致像“hello world”这样的内容被转换为“hello world”(3个空格)。不过我不确定这在这里是否是一个问题。 - Justin Morgan

1

您可以在每个单词后面和每个非单词字符后面添加一个空格(因此查找\W|\w+并用匹配项和空格替换)。例如,在Vim中:

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

1
你可以使用以下代码:
(\w+|&|\(|\)|\|)(?!$)

这意味着一个单词,或者一个&符号,或者一个(符号,或者一个)符号,或者一个|符号后面不跟随字符串的结尾;然后用匹配加空格符号替换匹配项。使用C#可以这样做:

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

现在result变量包含一个值:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接