我需要 RegExp 表达式,它在句子中选择每个字母一次(不区分大小写)。你能帮助我吗?
输入字符串为:
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。
结果必须是(以任何顺序):
abcdsz
UPD:好的,我明白了。没有 RegExp 解决方案。下面以编程方式解决。(Qt)
有两个警告,每个字母都在它们单独的匹配项中,并且不能保证字符的大小写(字符的最后一次出现,无论是大写还是小写,都将被选中)。
(.)(?!.*\1)
QRegExp
实现反向引用和前瞻,所以上面的正则表达式应该可以工作。
它应该与Qt::CaseInsensitive
选项一起使用。
.
在 QRegExp 中,默认情况下匹配任何字符,无一例外(这相当于s
在 Perl、PCRE、Java 等中一直有选项),因此根据您的要求,您可能希望首先去除字符串中的所有空格字符。 .
regex101 的演示(它使用 PCRE 引擎,但此正则表达式的行为应该没有区别)
以编程方式解决方案在这里:
QString s = "AaAaaAaaabbacdaasccasddasdascasdasZz";
QString variables = "";
for(int i=0;i<s.length(); ++i)
{
if(s[i].isLetter() && !variables.contains(s[i]))
variables+=s[i];
}
// variables = "abcdsz"