我有一个表达式:
((((the&if)|sky)|where)&(end|finish))
我需要的是在符号和单词之间加一个空格,使其最终如下:
( ( ( ( the & if ) | sky ) | where ) & ( end | finish ) )
我提出的正则表达式是(\w)*[(\&*)(\|*)]
,它只能让我:
( ( ( ( the& if) | sky) | where) & ( end| finish) )
我可以从居住的正则表达大师那里获得一些帮助吗?我将在C#中使用它。
答案 0 :(得分:2)
编辑:由于您使用的是C#,请尝试以下操作:
output = Regex.Replace(input, @"([^\w\s]|\w(?!\w))(?!$)", "$1 ");
在符合以下条件的任何字符后插入空格:
答案 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 ) )