正则表达式QRegExp

时间:2014-12-09 00:27:33

标签: regex qregexp qregularexpression

我需要RegExp表达式,它在句子中选择每个字母一次(不区分大小写)。 你能救我吗?

输入字符串是:

  

AaAaaAaaabbacdaasccasddasdascasdasZz

结果必须(以任何顺序):

  

abcdsz

UPD:好的,我明白了。没有RegExp解决方案。以编程方式解决方案(QT)

2 个答案:

答案 0 :(得分:2)

有可能,有两个警告,每个字母都在单独的匹配中,并且无法保证字符的大小写(字符的最后一个外观,无论是大写还是小写,都将被选中)。

(.)(?!.*\1)

QRegExp implements backreference, and look-ahead,所以上面的正则表达式应该可行。

它应与Qt::CaseInsensitive选项一起使用。

默认情况下,QRegExp中的

.匹配任何字符,无异常(这相当于Perl,PCRE,Java等中的s选项),因此根据您的要求,你可能想先删掉字符串中的所有空格字符..

Demo at regex101(它使用PCRE引擎,但此正则表达式的行为应该没有区别)

答案 1 :(得分:1)

以编程方式解决方案在这里:

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"