我有一个regex,它可以从文本中提取车牌。例如,它应该能够从以下字符集中提取D-D 200、A-DEÜ34、A-DEÜ34和D-D200:
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是错误的:
1) D-D 200 200在我的正则表达式中,我要做的是向前看,检查下一个字符是否是“空格和非数字的”。但我的代码似乎不能正常工作。
这是我的准则:
// 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|.|,))任何帮助都将不胜感激。
发布于 2020-11-24 15:05:26
如果您要断言在右边必须有一个非数字(除非有换行符),那么第一个示例D-D 200本身将不匹配,因为在它之后没有字符可以断言。
Note指出,(\s\D|.|,)与(\D)相同,\D与非数字匹配,但如果不需要捕获组,则可以省略它们。
您可以使用负前瞻性(?![^\d\r\n]*\d)来断言模式之后没有数字跟随。
[a-züäöA-ZÜÄÖ]{1,3}[-—][a-züäöA-ZÜÄÖ]{1,3}\s?[0-9]{1,4}(?![^\d\r\n]*\d)一个积极的前瞻性变体(?=[^\d\r\n]*$)可以断言在字符串结束之前,直接向右的是非数字。
[a-züäöA-ZÜÄÖ]{1,3}[-—][a-züäöA-ZÜÄÖ]{1,3}\s?[0-9]{1,4}(?=[^\d\r\n]*$)https://stackoverflow.com/questions/64987040
复制相似问题