正则表达式非Word边界和空格

时间:2015-07-06 09:39:56

标签: java regex

我正在寻找一个单一的正则表达式,它将匹配任何包含" new"那么这个词" ee"非字边界。下面是我在非字边界之前或之后放置的任何内容返回False的代码。

from PIL import Image
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

def generate_pdf(c):
    """
    letter :- (612.0, 792.0)
    """
    im = Image.open("so.png")   
    c.drawInlineImage(im, 256, 720, width=100, height=60)

c = canvas.Canvas("report_image.pdf", pagesize=letter)
generate_pdf(c)
c.save()

2 个答案:

答案 0 :(得分:1)

^.*?\\bnew\\s\\S*\\Bee\\B.*$

你可以尝试一下。参见演示。

https://regex101.com/r/cK4iV0/19

这将匹配单词new,然后eeword boundary不匹配。

答案 1 :(得分:1)

以下解释了为什么这些测试会产生这些结果:

  

System.out.println(sa.matches(".*\\s\\bnew\\b\\sfre.*")); //True

this is new freeCode包含something + whitespace + word boundary + new + word boundary + whitespace + fre + something。 Word边界在nw f之间匹配。

  

System.out.println(sa.matches(".*\\s\\Bee\\B\\s.*")); //False

\B\s之间的非字边界e无法匹配,因为e是一个字符。因此,没有匹配。

  

System.out.println(sa.matches(".*\\Bee\\B.*")); //True

\B之间的非单词边界e匹配,因为e中的freecode不在单词边界位置(它位于2个字母,单词字符之间),最后e后面再跟一个字母(在这种情况下为c)。这是一个有效的匹配。

要启用这两个检查,您需要组合第一个和第三个正则表达式模式。您不需要\s\b\b\s。如果您只想匹配整个单词new,请删除\s

System.out.println(sa.matches(".*\\bnew\\b.*\\Bee\\B.*"));

如果您需要匹配new周围的空格,请使用:

System.out.println(sa.matches(".*\\snew\\s.*\\Bee\\B.*"));