【发布时间】:2021-08-04 12:28:57
【问题描述】:
编辑: 强制性条件: 正则表达式必须插入以下语句:
Regex regex = new Regex("<REGEX_STRING>");
val= regex.Matches(val).Cast<Match>().Aggregate("", (s, e) => s + e.Value, s => s);
我发现我不能使用Regex.Replace() 方法,正如下面的答案中所建议的那样。
我正在寻找一个必须满足两个条件的 RegEx:
-
只接受 a-z、A-Z、0-9、\s(一个或多个),忽略
_(这就是为什么\w不是一个选项) -
[!] 排除字符串内任意位置的任何
{sq}“子字符串”
*{sq} - 实际上是这个 4 字符的字符串,不是 ASCII 符号的任何快捷方式!
到目前为止我所拥有的是:
\b(?!sq)[a-zA-Z0-9 ]*
但是当_ 出现时,这个正则表达式会删除所有内容+ 它也排除了整个[sq]。
例如,对于给定的字符串:
test[sq]uirrel{sq}_things 我应该得到testsquirrelthings 而我得到的是:testuirrel
小input | expected output下表:
| Input string | Expected output |
|---|---|
Na#me |
Name |
M2a_ny |
M2any |
Vari{sq}o@us |
Various |
test [sq]uirrel h23ere! |
test squirrel h23ere |
非常感谢任何帮助,这是我遇到过的最复杂的 RegEx ????
【问题讨论】:
-
一对
{}可以在另一个{}里面吗? -
也许删除它们?
Regex.Replace(text, @"{sq}|[^a-zA-Z\s]", "")? -
你的要求是矛盾的:你说“accept only az, AZ, 0-9, \s (one or more)”然后举个例子
M2a_ny- >Many2被删除。 -
@Backs 是的,inputString 可能会以 test{{sq}} 之类的形式出现,但它也应该被完全拒绝。所以结果将是 -> 测试。我不知道这是否回答了你的问题
-
@JohnathanBarclay 我的错!将立即修复它。它应该是 M2any。与 h23ere 相同