正则表达式 a^xb^y 替代

Regex a^xb^y substitute

我想在 python 中找到一个正则表达式,以便我可以确定具有以下形状的用户条目。

a^xb^y

当在字符串中找到这样的条目时,我想将其标记为垃圾邮件。

a: 可以是任意字符

b:可以是除a

中使用的字符以外的任何字符

x >=2, y >=2

示例:

我试过的代码:

string = "hello is abbbb aabbbbbcccddddddd...eefffggggggghhhhiiii,,,???jj"

reg1 = re.compile("(.){1,}")
match = reg1.match(string)
print(match)

输出: None 然而,当我使用 re.sub 时,它确实替代了它。

string_sub = re.sub(r"(.){1,}", r"", string)
print(string_sub)

输出: helo is ab abcd.efghi,?j

这应该不会发生,因为“hello”应该保持为“hello”,“abbb”也应该保持为“abbb”。 “aabbbbbcccdddddddd...eefffggggggghhhhiiii,???jj”已正确转换。替换对我来说很好,因为 len(string) > len(string_sub) 成立。然后我可以用它来标记字符串:

if(len(string_sub) < len(string)):
    print("String flagged as spam.")
else:
    print("String NOT flagged as spam.")

不幸的是,这也不起作用。

string_sub2 = re.sub(r"(.){1,}(?!)(.){1,}",r"", string)

您原来的正则表达式应该可以工作,但为什么您对两个 {1,} 使用 </code>?</p> <p>应该是这样<code>(.){1,}(?!)(.){1,},问题是它也会匹配像111222这样的数字,所以我认为使用[A-Za-z]或者只是[=可能会更好15=] 带有 i 标志。

你的正则表达式也不匹配一个完整的词,我不知道这是不是故意的。

您或许可以使用:

  1. 匹配具有此模式的完整单词

    • \b([A-Za-z]){1,}(?!)([A-Za-z]){1,}\S*\b
    • \b\w+([A-Za-z]){1,}(?!)([A-Za-z]){1,}\S*\b

    如果您不希望 \S* 与第一个 space 相匹配,您可以删除 \S*

  2. 如果你只想在它存在的地方找到它

    • ([A-Za-z]){1,}(?!)([A-Za-z]){1,}