我想删除dashes
之前,之后和之间的间隔词,而不是带连字符的词。
这是 - 一个测试句。 -Test- ---一二 - 三---四----。
应该成为:
这是一个测试句。测试一二 - 三---四。
删除多个短划线---
保留多个连字符Three---Four
。
我试图这样做:
string sentence = "This- -is - a test-sentence. -Test- --- One-Two--Three---Four----.";
string regex = @"(?<!\w)\-(?!\-)|(?<!\-)\-(?!\w)";
sentence = Regex.Replace(sentence, regex, "");
Console.WriteLine(sentence);
但输出是:
这是一个测试句。测试 - 一 - 二 - 三 - 。
答案 0 :(得分:3)
我建议做的是结合正面回顾和积极前瞻对抗不想要破折号旁边的角色。在你的情况下,这将是空格和句号。如果
这将是:In training mode, it normalizes the input by *batch statistics*. It also
maintains approximated population statistics by moving averages, which can
be used for instant evaluation in testing mode.
。
打破这个局面:
((?<=[\s\.])\-+)|(\-+(?=[\s\.]))
- 匹配空格或句号后的连字符((?<=[\s\.])\-+)
- 或|
- 匹配后跟空格或句号的连字符这是一个展示:
的JavaScript示例
(\-+(?=[\s\.])
这也可以在 Regex101 上看到。
请注意,使用此功能后,您可能还需要修剪多余的空格,这可以通过C#中的 .Trim()
来完成。
答案 1 :(得分:2)
您可以使用\b|\s
执行此任务。
<强> DEMO 强>
细分从regex101.com无耻地复制:
/(\b|\s)(-{3})(\b|\s)/g
(\b|\s)
\b
\b
在字边界(^\w|\w$|\W\w|\w\W)
\s
匹配任何空格字符(等于[\r\n\t\f\v ]
)(-{3})
-{3}
匹配字符 - 字面意思(区分大小写){3}
量词 - 准确匹配3次(\b|\s)
\b
\b
在字边界(^\w|\w$|\W\w|\w\W)
\s
\s
匹配任何空格字符(等于[\r\n\t\f\v ]
)答案 2 :(得分:1)
您可以只匹配单词字符之间的所有连字符,并使用简单的
删除所有其他连字符Regex.Replace(s, @"\b(-+)\b|-", "$1")
请参阅regex demo
<强>详情
\b(-+)\b
- 字边界,后跟1 +连字符,然后是字边界(即字母,数字和下划线之间的连字符)|
- 或-
- 其他情境中的连字符(将被删除)。请参阅C# demo:
var s = "This- -is - a test-sentence. -Test- --- One-Two--Three---Four----.";
var result = Regex.Replace(s, @"\b(-+)\b|-", "$1");
Console.WriteLine(result);
// => This is a test-sentence. Test One-Two--Three---Four.