Python:正则表达式与所需的相反[重复]

Posted

技术标签:

【中文标题】Python:正则表达式与所需的相反[重复]【英文标题】:Python: regex matching the opposite of what's desired [duplicate] 【发布时间】:2019-01-19 21:12:22 【问题描述】:

我希望我的正则表达式找到一个能够将其转换为 html 链接的 URL。正则表达式将用于如下所示的链接:www.site.extension 和 https://site.extension。正则表达式是 \S*.?w3.\S+.\S+ 并且在使用 https://regexr.com/ 时确实给出了所需的结果。然而,当使用我的 python 脚本时,我得到了与预期相反的结果,因此所有不是链接的东西都被视为好像是,但找不到链接。

python代码是:

testbestand = """TESTBESTAND

Div1 kjaskdjfiudhgjnkcvdnbk djskj ij g ijg jkdfnbdiiji jj iikdafnbn ojedfkj giqw34
Akdjfkjasdf

Div2 aksjdfkj sadfkjg sdkjiew kvckjeri cdkj sdkeridk erkire

Div3 kajkdjfkjakdjgsdghijskdg

Div 4 www.link.com

Div5
Table Left  Table Right
Table Left 2    Table Right 2
Table Left 3    Table Right 3
"""

fileContent = testbestand
toAddToFile = ""

#find links
pattern = re.compile(r'\S*\.?w3\.\S+\.\S+')
matches = re.split(pattern, fileContent)\

for match in matches:
    match = match.strip()

    if len(match) > 0:
        #TODO change to 'edit' file, instead of adding to it
        test = """<a href=" """ + match + """>" """ + match + "</a>"
        print(test)

        toAddToFile += """<a href=" """ + match + """>" """ + match + "</a>"

提前感谢您的帮助!如果需要更多信息或代码,我会立即提供。

【问题讨论】:

如果要匹配为什么要拆分? 我回滚了你的最新编辑;你的问题应该严格来说是一个问题。您当然应该考虑支持和/或接受帮助您解决问题的答案。另见help. 我正在等待计时器接受并已经投票。搜索 pythong 时我找不到重复的帖子,在正则表达式上给出相反的结果。 【参考方案1】:

那是因为您使用了re.split,它旨在将文本at 拆分为模式。相反,使用 `re.findall:

pattern = re.compile(r'\S*\.?w3\.\S+\.\S+')
matches = pattern.findall(fileContent)

【讨论】:

非常感谢!计时器完成后,我会将其标记为正确答案。它似乎理解 re.split 错误。 re.findall 不会帮助保留不匹配的内容。 现在很好,尽管我将来可能会更改代码的行为,所以我会记住这一点。感谢您指出!【参考方案2】:

您应该使用re.sub 而不是re.split

toAddToFile = re.sub(r'(\S*\.?w3\.\S+\.\S+)', r'<a href="\1">\1</a>', fileContent)

【讨论】:

以上是关于Python:正则表达式与所需的相反[重复]的主要内容,如果未能解决你的问题,请参考以下文章

构建正则表达式模式以最终从数据中选择所需的文本

使用正则表达式在 Pandas 数据框中创建新列 [重复]

是否可以比较一行中的两个值并获取所需的值,但这两个值都与写入的正则表达式匹配

python 正则表达式

使用 Python 正则表达式在两个变量之间查找 HTML

正则表达式学习笔记