如何为包含最少一个数字且不包含任何字母的字符串编写正则表达式?

时间:2017-12-20 09:21:07

标签: c++ regex

如何为包含最少一个数字且不包含任何字母的字符串编写正则表达式?数字或字母的位置并不有趣。字符串中的另一个字符也不是很有趣。

QString str;
if (str.contains(QRegExp("[0-9]")) && !str.contains(QRegExp("[a-zA-Z]")))
...

基本上,我需要在一个正常的表达中加入两个条件。怎么做?

3 个答案:

答案 0 :(得分:1)

我会选择^[^a-zA-Z]*[0-9]+[^a-zA-Z]*$(允许字符串中包含任何可选的非字母字符)如果你想要纯数字,你可以只使用字符串开始/结束^[0-9]+$

答案 1 :(得分:0)

这有效:

QString str {...};
if (QRegExp("[^a-zA-Z]*[0-9][^a-zA-Z]*").exactMatch(str))

" [0-9]"用于必须匹配的数字。

数字之前和之后可以是除字母之外的任意数量的字符(" [^ a-zA-Z] *")。

如果您不使用exactMatchindexIncontains,则需要添加' ^'和' $'用于匹配字符串的开头和结尾,或者您需要检查正则表达式在开头是否匹配并匹配完整的字符串(长度)。

答案 2 :(得分:0)

出于您的目的,您可以使用此正则表达式:

^[a-zA-Z]{0}([\W\d]+)[a-zA-Z]{0}$

\ d匹配一个数字(等于[0-9])

\ W匹配无字字符

[a-zA-Z] {0}我们避免使用字符

+这意味着我们至少需要一个

^和$:它们表示开始和结束字符串;以这种方式,我们强制匹配完整字符串的正则表达式(从开始到结束)

你可以在这里玩这个正则表达式 https://regex101.com/r/cXzI1A/2