我需要一些正则表达式的帮助。
我需要搜索“Android 2.2.x”,其中x可以是字符串中的1-9,所以我创建了这个RegEx Androind 2.2。\ d {1}这很好用。
现在我想在字符串
中找到Android 2.2如果我使用正则表达式“Androind 2.2”进行搜索,它会匹配“Android 2.2”和“Android 2.2.x”但我希望正则表达式只匹配“Android 2.2”
任何人都可以帮助我。
谢谢,
答案 0 :(得分:2)
使用否定前瞻。 "Android 2.2(?!\.\d)"
匹配"Android 2.2"
但不匹配"Android 2.2.1"
,"Android 2.2.2"
,"Android 2.2.10"
等。如果下一个字符不是数字,它也会匹配"Android 2.2."
或者到达string
的结尾。
有关详细信息,请参阅Grouping Constructs。
答案 1 :(得分:0)
如果此字符串Android 2.2后跟字符串结尾,则可以在匹配字符串结尾的模式后包含$。
否则,您可以执行类似Android 2.2 [^ 0-9。]的操作,以确保此字符串后面没有点或数字。
针对第二种情况的一个论点是你可以有一个字符串 “你正在使用Andoid 2.2。”最后的地方。只是结束一个句子......你想匹配那个字符串吗?
答案 2 :(得分:0)
只是抛弃另一种方法,如果你需要为不同的版本提供不同的行为,你可以这样做:
string pattern = @"Android (?<major>\d+)\.(?<minor>\d+)(\.(?<revision>\d+))?";
Match match = Regex.Match(text, pattern);
if (match.Success)
{
int major = int.Parse(match.Groups["major"].Value);
int minor = int.Parse(match.Groups["minor"].Value);
int revision;
if (!int.TryParse(match.Groups["revision"].Value, out revision))
revision = 0;
if (major == 2 && minor == 2)
{
if (revision == 0)
{
// Process version 2.2
}
else
{
// Process version 2.2.x, where x > 0
}
}
}
这将匹配主要版本,然后是次要版本,可选地后跟修订版本,并允许您访问这三个数字中的每一个。请注意,如果没有指定修订版,则将其视为0(即"Android 2.2" == "Android 2.2.0"
)。
您也可以使用Version
class执行某些工作,例如:
string pattern = @"Android (?<version>\d+\.\d+(\.\d+)?)";
Match match = Regex.Match(text, pattern);
if (match.Success)
{
Version version = Version.Parse(match.Groups["version"].Value);
if (version.Major == 2 && version.Minor == 2)
{
if (version.Build < 1)
{
// Process version 2.2
}
else
{
// Process version 2.2.x, where x > 0
}
}
}
第三个数字组件称为“Build”,而不是“Revision”。请注意,如果值为0,Build
property将返回0,如果未指定值,则返回-1。