我想删除重复的字符,但保留其中一个辅音字母的单词。我写了下面的代码,但它删除了所有这些。
import re text = "myyyy nname isss ssevvaall" new = re.sub(r"([a-z])(\1{2,})","",text)
字符串结果应为我的名字是sevvaal
kdfy810k1#
如果你想要v和a char的异常行为,那么使用这个正则表达式,
v
a
([^\W\d_va])(?=\1)
字符串然后用空绳将其移除这里[^\W\d_va]表示除v和a以外的所有字母Demo where v and a letter is exempted也可以将[^\W\d_va]写成[b-uw-zB-UW-Z]如果你想在不使用lookahead的情况下以你的风格编写,你可以使用下面的regex,
[^\W\d_va]
[b-uw-zB-UW-Z]
([^\W\d_va])\1+
型并将其替换为$1或\1,其中正则表达式将匹配出现多次的字符,并将其替换为单个字符Demo的
$1
\1
jhkqcmku2#
基于字符集a-z,使用捕获组,您可以使用单个字符替换3个或更多连续字符,或者匹配2个连续的辅音,后面没有元音,然后替换为单个字符。符号\1\2和\3是匹配组中捕获的相同字符的反向引用。
\2
\3
([a-z])\1{2,}|([b-df-hj-np-tv-z])\2(?!([aeiou])\3)
字符串模式匹配:
([a-z])\1{2,}
|
([b-df-hj-np-tv-z])\2
(?!([aeiou])\3)
Regex demo
import re text = "myyyy nname isss ssevvaall" pattern = r"([a-z])\1{2,}|([b-df-hj-np-tv-z])\2(?!([aeiou])\3)" new = re.sub(pattern, r"\1\2", text) print(new)
型产出
my name is sevvaal
型
2条答案
按热度按时间kdfy810k1#
如果你想要
v
和a
char的异常行为,那么使用这个正则表达式,字符串
然后用空绳将其移除
这里
[^\W\d_va]
表示除v
和a
以外的所有字母Demo where v and a letter is exempted
也可以将
[^\W\d_va]
写成[b-uw-zB-UW-Z]
如果你想在不使用lookahead的情况下以你的风格编写,你可以使用下面的regex,
型
并将其替换为
$1
或\1
,其中正则表达式将匹配出现多次的字符,并将其替换为单个字符Demo的
jhkqcmku2#
基于字符集a-z,使用捕获组,您可以使用单个字符替换3个或更多连续字符,或者匹配2个连续的辅音,后面没有元音,然后替换为单个字符。
符号
\1
\2
和\3
是匹配组中捕获的相同字符的反向引用。字符串
模式匹配:
([a-z])\1{2,}
匹配3个或更多相同的连续字符,捕获组1中的第一个字符|
或([b-df-hj-np-tv-z])\2
匹配2个相同的辅音,捕获组2中的第一个(?!([aeiou])\3)
使用负前向Assert不2个相同的元音,捕获组3中的第一个Regex demo
型
产出
型