首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展望未来,寻找非数字字符

展望未来,寻找非数字字符
EN

Stack Overflow用户
提问于 2020-11-24 13:00:26
回答 1查看 191关注 0票数 0

我有一个regex,它可以从文本中提取车牌。例如,它应该能够从以下字符集中提取D-D 200A-DEÜ34A-DEÜ34D-D200

代码语言:javascript
复制
1) D-D 200
2) A-DEÜ34.
3) A-DE34 on the fly
4) D-D200 my name is blah blah

但以下是一个不可接受的车牌号码,从以下文本中提取D-D 200是错误的:

代码语言:javascript
复制
1) D-D 200 200

在我的正则表达式中,我要做的是向前看,检查下一个字符是否是“空格和非数字的”。但我的代码似乎不能正常工作。

这是我的准则:

代码语言:javascript
复制
//      between one to three letters:   [a-züäöA-ZÜÄÖ]){1,3})
//      a dash line                     \-   or a \\—
//      between one to three letters:   [a-zA-Z]){1,3}
//      zero or one space               (\s){0,1}
//      one to four letters             ([0-9]){1,4}
//      look ahead (?=)
//      look ahead for: space AND a non digit   \s\D
//              or dot or comma .|,
(([a-züäöA-ZÜÄÖ]){1,3})(\-|—)([a-züäöA-ZÜÄÖ]){1,3}((\s){0,1})([0-9]){1,4}(?=(\s\D|.|,))

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 15:05:26

如果您要断言在右边必须有一个非数字(除非有换行符),那么第一个示例D-D 200本身将不匹配,因为在它之后没有字符可以断言。

Note指出,(\s\D|.|,)(\D)相同,\D与非数字匹配,但如果不需要捕获组,则可以省略它们。

您可以使用负前瞻性(?![^\d\r\n]*\d)来断言模式之后没有数字跟随。

代码语言:javascript
复制
[a-züäöA-ZÜÄÖ]{1,3}[-—][a-züäöA-ZÜÄÖ]{1,3}\s?[0-9]{1,4}(?![^\d\r\n]*\d)

Regex演示

一个积极的前瞻性变体(?=[^\d\r\n]*$)可以断言在字符串结束之前,直接向右的是非数字。

代码语言:javascript
复制
[a-züäöA-ZÜÄÖ]{1,3}[-—][a-züäöA-ZÜÄÖ]{1,3}\s?[0-9]{1,4}(?=[^\d\r\n]*$)

Regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64987040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档