Python 正则表达式a^xb^y替换
我想在python中找到一个正则表达式,以便确定具有以下形状的用户条目 a^xb^y 当在字符串中找到这样的条目时,我想将其标记为垃圾邮件 a:可以是任何角色 b: 可以是除在 x>=2,y>=2 示例:Python 正则表达式a^xb^y替换,python,regex,substitution,Python,Regex,Substitution,我想在python中找到一个正则表达式,以便确定具有以下形状的用户条目 a^xb^y 当在字符串中找到这样的条目时,我想将其标记为垃圾邮件 a:可以是任何角色 b: 可以是除在 x>=2,y>=2 示例: “此文本是一个GGEEEFFF示例”应匹配(GGEEEFFF) “xxoxo也许这会有帮助”不应该匹配 “yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 我尝试的代码: s
- “此文本是一个GGEEEFFF示例”应匹配(GGEEEFFF)
- “xxoxo也许这会有帮助”不应该匹配
- “yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
string = "hello is abbbb aabbbbbcccddddddd...eefffggggggghhhhiiii,,,???jj"
reg1 = re.compile("(.)\1{1,}")
match = reg1.match(string)
print(match)
OUT:
None
但是,当我使用re.sub时,它确实会替代它
string_sub = re.sub(r"(.)\1{1,}", r"\1", string)
print(string_sub)
输出:直升机是ab abcd.efghi,?j
这应该不会发生,因为“hello”应该保持为“hello”,而“abbb”也应该保持为“abbb”。“aabbbbbcccddddd…eefffgggggghhhhiii,,,,??jj”已正确转换。我认为可以替换,因为len(string)
len(string)
有效。然后我可以用它来标记字符串:
if(len(string_sub) < len(string)):
print("String flagged as spam.")
else:
print("String NOT flagged as spam.")
您的原始正则表达式应该可以工作,但是为什么您对这两个
{1,}
都使用\1
它应该是这样的()\1{1,}(?!\1)()\2{1,}
,问题是它也会匹配像111222
这样的数字,所以我认为最好使用[A-Za-z]
或者只使用[A-z]
和I
标志
你的正则表达式也不匹配一个完整的单词,我不知道这是否是故意的
您可能可以使用:
\b([A-Za-z])\1{1,}(?!\1)([A-Za-z])\2{1,}\S*\b
\b\w+([A-Za-z])\1{1,}(?!\1)([A-Za-z])\2{1,}\S*\b
\S*
与第一个空格匹配,可以将其删除
([A-Za-z])\1{1,}(?!\1)([A-Za-z])\2{1,}
这是一个相当糟糕的垃圾邮件过滤器。任何人都不允许谈论气球、浣熊、痰盂或委员会……这是一个很好的暗示。但是,由于每个条目也将在以后进行审查,因此使用它是有意义的。背后的原因是,我使用亵渎模型来预测条目是否包含亵渎。不幸的是,我们还想去掉像“aabb”这样的条目。因此,放在模型前面的正则表达式过滤器应该可以工作。通常我会想捕捉所有的字符,但是对于数字来说,把它们去掉是有意义的。所以代替[A-Za-z]->[\D]对我来说应该很好。谢谢:)
string_sub2 = re.sub(r"(.)\1{1,}(?!\1)(.)\1{1,}",r"\1\1", string)