java - 在java中排除一定长度的单词的负向Lookbehind
问题描述
我有一个正则表达式
\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?
此 Regex 匹配长度为 3 或更多的任何拉丁字符。与 ABC 一样,匹配大于 3 的 ABCDE。
我想要的是,这个正则表达式仅在拉丁字符大于 6 的情况下匹配(假设)。我不想更改上面的正则表达式,但只想排除小于 6 的拉丁字符匹配。
所以我添加了 Negitive Lookbehind 作为
(?<!\w{1,6})
现在正则表达式变为
\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?(?<!\w{1,6})
但这里所有长度的拉丁字符都被排除在外。
如何添加负向后查找以排除长度 {1 到 6} 内的拉丁字符?
解决方案
您的正则表达式失败,因为负面的后视仅检查字符串末尾的 1-6 个单词。
例如,字符串“A BCDEFG ”有 7 个字符,而您的否定后看发现“ BCDEFG ”是 6 个字符,然后排除所有字符串。
我认为你应该像这样修复负面的lookbehind:
(?<!^\w{1,6})
注意“^”,这意味着你的lookbehind必须从一开始就检查。
推荐阅读
- node.js - 按所选类别获取 Firestore 函数
- vba - 宏 for 循环遍历 Outlook 未读电子邮件
- python - 将字符列表加入单词列表
- java - Keycloak 密码黑名单不适用于特殊符号
- pandas - 如何对具有两级标题的数据框进行分组并生成箱线图?
- gradle - Gradle:如何通过管道进入 Exec 任务
- javascript - 如何在 MongoDB 聚合中包含属性
- javascript - 如果目标具有共享运算符,RxJS withLatestFrom 不会发出值
- javascript - 使用组件方法中的 vuejs 触发`image-uploader`
- laravel - Laravel 8 的动态路由