Python 用于查找首字母缩略词并避免由该模式组成的单词的正则表达式

Python 用于查找首字母缩略词并避免由该模式组成的单词的正则表达式,python,regex,beautifulsoup,regex-negation,Python,Regex,Beautifulsoup,Regex Negation,我正在使用python 2.7和。 我需要找到一个缩写词,如abc或a.b.c.,并避免像qweabcrty这样的假阳性。该模式可以位于字符串的开头,也可以位于字符串的结尾,可以在前后有空格、引号、双引号、连字符(等等),但不能是字母数字字符 我来到这个正则表达式 [^\w]?a\.?b\.?c\.?[^\w]? 这对我来说没关系 abc a、 不列颠哥伦比亚省 废话(abc) abc废话 废话 废话 废话 但它也被发现(我不想): qweabcrty 如果我移除了这个按钮?在这两个[

我正在使用python 2.7和。 我需要找到一个缩写词,如abc或a.b.c.,并避免像qweabcrty这样的假阳性。该模式可以位于字符串的开头,也可以位于字符串的结尾,可以在前后有空格、引号、双引号、连字符(等等),但不能是字母数字字符

我来到这个正则表达式

[^\w]?a\.?b\.?c\.?[^\w]?
这对我来说没关系

  • abc
  • a、 不列颠哥伦比亚省
  • 废话(abc)
  • abc废话
  • 废话
  • 废话
  • 废话
但它也被发现(我不想):

  • qweabcrty
如果我移除了这个按钮?在这两个[^\w]之后,它将不再找到案例1、2、4和5,因为它希望在之前和/或之后找到某些内容

长话短说,我如何具体说明: abc可以是字符串中的任意字符,但如果前面和/或后面有字符,则该字符不能是字母数字字符

python代码如下所示:

import re
from bs4 import BeautifulSoup, SoupStrainer

html = """
<html>
 <a>abc</a>
 <a>a.b.c.</a>
 <a>blah (abc)</a>
 <a>abc-blah</a>
 <a>blah-abc</a>
 <a>blah abc blah</a>
 <a>blah-abc-blah</a>
 <a>qweabcrty</a>
</html>"""

links = BeautifulSoup(html, "lxml", parse_only=SoupStrainer(["a"]))

tags = links.find_all("a", text = re.compile("[^\w]?a\.?b\.?c\.?[^\w]?", re.I))
print tags
重新导入
来自bs4进口美容集团,SoupStrainer
html=”“”
abc
a、 不列颠哥伦比亚省。
废话(abc)
abc废话
废话
废话
废话
qweabcrty
"""
links=BeautifulSoup(html,“lxml”,仅解析=SoupStrainer([“a”]))
tags=links.find_all(“a”,text=re.compile([^\w]?a\.?b\.?c\.?[^\w]?”,re.I))
打印标签

尝试使用单词边界(
\b
)元字符:

html = """
<html>
 <a>abc</a>
 <a>a.b.c.</a>
 <a>blah (abc)</a>
 <a>abc-blah</a>
 <a>blah-abc</a>
 <a>blah abc blah</a>
 <a>blah-abc-blah</a>
 <a>qweabcrty</a>
</html>"""

import re
print re.sub(r'\b(abc|a\.\b.\.c)\b', '@@@', html)
html=”“”
abc
a、 不列颠哥伦比亚省。
废话(abc)
abc废话
废话
废话
废话
qweabcrty
"""
进口稀土
打印re.sub(r'\b(abc | a\.\b.\.c)\b','@@@@',html)
印刷品

<html>
 <a>@@@</a>
 <a>@@@.</a>
 <a>blah (@@@)</a>
 <a>@@@-blah</a>
 <a>blah-@@@</a>
 <a>blah @@@ blah</a>
 <a>blah-@@@-blah</a>
 <a>qweabcrty</a>
</html>

@@@
@@@.
胡说八道(@@@1)
@@@-废话
废话-@@@
诸如此类
废话-@@@@@废话
qweabcrty

谢谢,好像我问的那样有效!只是一个问题:你为什么用(abc a\.\b.\.c)而不是(a\.\b.\c?)呢?更快?