python 正则表达式中的逆匹配

jljoyd4f  于 2022-12-21  发布在  Python
关注(0)|答案(3)|浏览(222)

我有一根绳子

<img width="24" src="https://someurl.com" height="24" alt="FirstName LastName" id="ember44" class="global-nav__me-photo ember-view"> id="ember44" class="global-nav__me-photo ember-view">

在RegEx中,我需要选择除

alt="FirstName LastName"

试着表达一下

alt.+(?!alt)

但还是没有到位,提前谢谢你!

lsmd5eda

lsmd5eda1#

与其尝试匹配所有 * 不是 * 您的“反搜索”字符串的字符串,不如将该字符串替换为空?

s = """<img width="24" src="https://someurl.com" height="24" alt="FirstName LastName" id="ember44" class="global-nav__me-photo ember-view"> id="ember44" class="global-nav__me-photo ember-view">"""

s_new = re.sub(r'alt=\"[^\"]+\"\s+', '', s)
# '<img width="24" src="https://someurl.com" height="24" id="ember44" class="global-nav__me-photo ember-view"> id="ember44" class="global-nav__me-photo ember-view">'

说明(Try online):

alt=\"[^\"]+\"\s+
-----------------

alt=\"       \"     : Literally alt=, followed by quotes
      [^\"]+        : One or more non-quote characters
               \s+  : One or more whitespace
krugob8w

krugob8w2#

那这个怎么样

<(.*)(?=alt=\"[^\"]+\")(?:alt=\"[^\"]+\")([^>]+)>

您可以在此处进行测试https://regex101.com/r/P0DLw5/1
这基本上是得到alt="..."之前的所有内容,然后匹配但忽略alt="...”,然后得到它之后的所有内容。
这是不完美的任何手段,但我去你目前的例子。

3pvhb19x

3pvhb19x3#

好吧,为了反转一个正则表达式,你可以使用re.sub(),它需要3个参数。一个模式,替换,和一个原始字符串。
所以你可以这样反转

import re

s = '<img width="24" src="https://someurl.com" height="24" alt="FirstName LastName" id="ember44" class="global-nav__me-photo ember-view"> id="ember44" class="global-nav__me-photo ember-view">'

pattern = r'alt=".*?"'
without_alt = re.sub(pattern, '', s)
print(without_alt)

相关问题