如何消除数字后跟特定的字符串

时间:2019-04-01 09:35:45

标签: c# regex

我有一个很长的正则表达式模式。这只是其中的一部分:

string pattern = @"((?<!top=)(?<![A-Za-z])\d)+";

给出字符串:

date(Account/AccountClose) gt 2019-03-25 and Brg eq '100'&$select=IdAccountCurrent&$skip=10&$top=10

它与2019, 03, 25, 100, 10 and 0匹配。

我想从匹配结果中删除最后一个0。换句话说,后面跟top=的所有数字都不应匹配。

我的解决方案仅在top=后有一位数字时有效。如何获得所需的结果?

regex101 example

更新:不幸的是,建议的解决方案不适用于整个模式。我试图简化我的示例,但是看起来这是不可能的。

所以我的整个正则表达式模式是:

string pattern = @"((?<!top=)(?<![A-Za-z])\d|-|T\d+|:|\.|\+|(?<=\d)Z)+|\bfalse\b|\btrue\b|\bnull\b|'[^']+'|\(['\d][^\)]+\)";

我需要编辑此模式以消除top=之后的所有数字。

my whole example(请在此示例中查看最后一行,最后0不应匹配)

2 个答案:

答案 0 :(得分:2)

您可以将正则表达式更改为我使用\b拒绝数字的部分匹配的地方,

(?<!top=)(?<![A-Za-z])\b\d+

Demo

您编写正则表达式((?<!top=)(?<![A-Za-z])\d)+的方式将通过在单个条件上应用条件,然后计算一个或多个这样的字符而起作用,这些字符在正则表达式中不允许使用\b,因此我更改了删除外部括号并使用\b\d+。希望这能给您所有您想要的比赛。让我知道您是否遇到任何问题。

答案 1 :(得分:2)

只需在正则表达式中添加0-9,以强制该数字前面不能再加上数字:

((?<!top=)(?<![A-Za-z0-9])\d+)

有关演示,请参见here

但是您也可以使用单词边界:

(?<!top=)\b(\d+)

有关演示,请参见here