我有一个很长的正则表达式模式。这只是其中的一部分:
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=
后有一位数字时有效。如何获得所需的结果?
更新:不幸的是,建议的解决方案不适用于整个模式。我试图简化我的示例,但是看起来这是不可能的。
所以我的整个正则表达式模式是:
string pattern = @"((?<!top=)(?<![A-Za-z])\d|-|T\d+|:|\.|\+|(?<=\d)Z)+|\bfalse\b|\btrue\b|\bnull\b|'[^']+'|\(['\d][^\)]+\)";
我需要编辑此模式以消除top=
之后的所有数字。
my whole example(请在此示例中查看最后一行,最后0
不应匹配)
答案 0 :(得分:2)
您可以将正则表达式更改为我使用\b
拒绝数字的部分匹配的地方,
(?<!top=)(?<![A-Za-z])\b\d+
您编写正则表达式((?<!top=)(?<![A-Za-z])\d)+
的方式将通过在单个条件上应用条件,然后计算一个或多个这样的字符而起作用,这些字符在正则表达式中不允许使用\b
,因此我更改了删除外部括号并使用\b\d+
。希望这能给您所有您想要的比赛。让我知道您是否遇到任何问题。
答案 1 :(得分:2)