我收到的字符串可以是:
"+name" > + followed only by Alphanumeric characters
"-Age18" > - followed only by Alphanumeric characters
注意:
1. +/-之后的第一个字符不能是数字
2.不允许使用空格或任何特殊字符(。,; ...)。
我可以使用Substring来获取String的两个部分。
但是如何使用Regex验证字符串并将其解析为2组?
我认为Regex可能是更好的选择,不是吗?
更新:
我按照以下方式尝试了Regex:
String pattern = @"^[?<Direction>+|-]\[?<Value>A-Za-z0-9]$";
Match match = Regex.Match(value, pattern);
if (match.Success) {
String direction = match.Groups["Direction"];
String value = match.Groups["Value"];
}
但是我没有得到预期的结果,所以我认为问题出在我的正则表达式上?
答案 0 :(得分:1)
假设第一组是+/-而第二组是其余组,那么你可以使用this regex:
^([+-])([A-Za-z]{1}[A-Za-z0-9]*)$
并访问索引为1
和2
的群组,如下所示:
String pattern = @"^([+-])([A-Za-z]{1}[A-Za-z0-9]*)$";
Match match = Regex.Match(value, pattern);
if (match.Success) {
String direction = match.Groups[1];
String value = match.Groups[2];
}
如果您必须为您的群组命名,请this regex:
^(?<Direction>[+-])(?<Value>[A-Za-z]{1}[A-Za-z0-9]*)$
答案 1 :(得分:1)
在不更改代码的情况下,此正则表达式应按预期工作:
String pattern = @"^(?<Direction>[+-])(?<Value>[A-Za-z]{1}[A-Za-z0-9]*)$";
Match match = Regex.Match(value, pattern);
if (match.Success) {
String direction = match.Groups["Direction"];
String value = match.Groups["Value"];
}
答案 2 :(得分:0)
以下正则表达式将匹配字符串的两个部分:
(?<Direction>[+-])(?<Value>[A-Za-z][A-Za-z0-9]*)
答案 3 :(得分:0)
正则表达式是一种好方法。最简单的方法可能是将正则表达式定义为字符串,然后使用Pattern类中的静态方法来测试匹配。
String group1 = "[+][a-zA-Z][a-zA-Z0-9]*";
String group2 = "[-][a-zA-Z][a-zA-Z0-9]*";
String str = "-Age18";
if(Pattern.matches(group1, str)){
// Group 1
System.out.println("Group 1");
} else if(Pattern.matches(group2, str)){
// Group 2
System.out.println("Group 2");
} else{
// Neither
System.out.println("Neither");
}
此处,-Age18将属于第2组
编辑:这只是假设验证部分。 musefan的答案更适合获得价值