负数Lookbehind排除Java中一定长度的单词

时间:2019-01-31 00:40:17

标签: java regex negative-lookbehind

我有一个正则表达式

\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?

此正则表达式匹配长度大于等于3的所有拉丁字符。喜欢 匹配大于3的ABC,ABCDE。

我想要的是,仅在拉丁字符大于6的情况下才匹配此正则表达式。我不想在正则表达式上进行更改,而只想排除小于6的拉丁字符匹配。

所以我将Negetive 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}之间的拉丁字符?

3 个答案:

答案 0 :(得分:1)

您的正则表达式失败,因为后面的负向查找仅检查字符串末尾的1-6个字。

例如,字符串为“ A BCDEFG ”的字符为7个字符,而您的否定式后面字符为“ BCDEFG ”为6个字符的字符,则排除所有字符串。 / p>

我认为您应该像这样解决负面的情况:

(?<!^\w{1,6})

请注意“ ^”,这意味着您必须从头开始检查。

答案 1 :(得分:0)

乘以2。
2 x 3 = 6

(?:\p{L}+[\s,\u060C]*(\u062E\u06CC\u0627\u0628\u0627\u0646)?[\s,\u060C]*\p{L}+[\s,\u060C]*(\u06A9\u0648\u0686\u0647|\u06A9\u0648\u06CC)?[\s,\u060C]*\p{L}+[\s,\u060C]*(\u067E\u0644\u0627\u06A9[ ]\s*\d+)?(\s*\u06A9\u062F[ ]\u067E\u0633\u062A\u06CC[ ]\s*\d{9})?){2}

扩展

 (?:
      \p{L}+ [\s,\u060C]* 
      (                                              # (1 start)
           \u062E \u06CC \u0627 \u0628 \u0627 \u0646 
      )?                                             # (1 end)
      [\s,\u060C]* \p{L}+ [\s,\u060C]* 
      (                                              # (2 start)
           \u06A9 \u0648 \u0686 \u0647 
        |  \u06A9 \u0648 \u06CC 
      )?                                             # (2 end)
      [\s,\u060C]* \p{L}+ [\s,\u060C]* 
      (                                              # (3 start)
           \u067E \u0644 \u0627 \u06A9 [ ] \s* \d+ 
      )?                                             # (3 end)
      (                                              # (4 start)
           \s* \u06A9 \u062F 
           [ ] \u067E \u0633 \u062A \u06CC 
           [ ] \s* \d{9} 
      )?                                             # (4 end)
 ){2}

答案 2 :(得分:0)

您应该使用正向前瞻,这将检查所有拉丁字符应大于6。这将帮助您:

(?=\w{6,})\p{L}+[\s,،]*(خیابان)?[\s,،]*\p{L}+[\s,،]*(کوچه|کوی)?[\s,،]*\p{L}+[\s,،]*(پلاک \s*\d+)?(\s*کد پستی \s*\d{9})?