正则表达式 a^xb^y 替代
Regex a^xb^y substitute
我想在 python 中找到一个正则表达式,以便我可以确定具有以下形状的用户条目。
a^xb^y
当在字符串中找到这样的条目时,我想将其标记为垃圾邮件。
a: 可以是任意字符
b:可以是除a
中使用的字符以外的任何字符
x >=2, y >=2
示例:
“此文本是 ggeeeeeeefff 示例”应该 匹配 (ggeeeeeeefff)
“xxoxo 也许这会有所帮助”不应该匹配
"yyyyyyyyyee 你总是那么傻" 应该 匹配 (yyyyyyyyyee)
我试过的代码:
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
标志。
你的正则表达式也不匹配一个完整的词,我不知道这是不是故意的。
您或许可以使用:
匹配具有此模式的完整单词
\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*
。
如果你只想在它存在的地方找到它
([A-Za-z]){1,}(?!)([A-Za-z]){1,}
我想在 python 中找到一个正则表达式,以便我可以确定具有以下形状的用户条目。
a^xb^y
当在字符串中找到这样的条目时,我想将其标记为垃圾邮件。
a: 可以是任意字符
b:可以是除a
中使用的字符以外的任何字符x >=2, y >=2
示例:
“此文本是 ggeeeeeeefff 示例”应该 匹配 (ggeeeeeeefff)
“xxoxo 也许这会有所帮助”不应该匹配
"yyyyyyyyyee 你总是那么傻" 应该 匹配 (yyyyyyyyyee)
我试过的代码:
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
标志。
你的正则表达式也不匹配一个完整的词,我不知道这是不是故意的。
您或许可以使用:
匹配具有此模式的完整单词
\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*
。如果你只想在它存在的地方找到它
([A-Za-z]){1,}(?!)([A-Za-z]){1,}