我正在尝试创建一个正则表达式,它在关键字后面选择一个数字。样本数据:
常用的关键字是"Contract",在这个关键字之后,0到4个可能的非数字字符。然后是合同的编号,总是在7或8个数字之间。当有更多的数字时,不应该选择它。我从(?<=Contract)(.*)(0-9+)开始,它选择了很多。我只需要号码,只有当它有7或8位数。
如果你有一个解决办法,你也能解释一下怎么做,这样我就可以从中吸取教训。
结果应该是
发布于 2019-02-01 11:53:15
您可以使用量词来指定数字和非数字的数量,并使用负前瞻检查在7或8位之后是否有更多的数字跟随。
若要匹配合同的所有变体,可以使匹配大小写不敏感或匹配合同类似于[Cc]ontract。
(?<=\b[Cc]ontract)\D{0,4}([0-9]{7,8})(?!\d)那就匹配了
(?<=\b[Cc]ontract)正向后向后断言左边的是契约或契约(如果您不想使用Contract,也可以匹配它,而不是\b[Cc]ontract)\D{0,4}匹配0-4次而不是数字([0-9]{7,8})捕获7-8次数字(?!\d)负前瞻性断言以下内容不是数字.NET支持无限查找。在这种情况下,您可以使用以下方法获得匹配:
(?<=\b[Cc]ontract\D{0,4})[0-9]{7,8}(?!\d).NET regex演示
发布于 2019-02-01 11:54:20
你可以用这个正则表达式,
(?i)contract[^\d]{0,4}(\d{7,8})(?!\d)解释:
(?i) -启用不区分大小写的匹配,就像在有Contract和其他contract的地方一样contract -字面上匹配这个文本[^\d]{0,4} -匹配任何字符0到4次,但数字除外(\d{7,8}) -匹配长度为7到8的数字(?!\d) -如果前面有一个数字,就会拒绝匹配。发布于 2019-02-01 12:12:22
使用javascript:/contract(?!(\d{0-4}))(\d{7,8})(?!(\d))/i
后面跟着任何0到4个不是数字的字符((?!(\d{0-4}))是指长度介于0到4之间的不包含数字的字符串),直到找到一个7或8位的序列((\d{7,8})),其中下一个符号不是数字((?!(\d)))。i标志意味着正则表达式不区分大小写。
在我回答之后,我发现这个问题与.net有关。在c#中,您可以使用相同的模式(除了末尾的i )并传递RegexOptions.IgnoreCase选项。
https://stackoverflow.com/questions/54478910
复制相似问题