使用Regex验证String并将其解析为2个组

时间:2016-06-27 14:31:24

标签: c# regex

我收到的字符串可以是:

"+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"];
}

但是我没有得到预期的结果,所以我认为问题出在我的正则表达式上?

4 个答案:

答案 0 :(得分:1)

假设第一组是+/-而第二组是其余组,那么你可以使用this regex

^([+-])([A-Za-z]{1}[A-Za-z0-9]*)$

并访问索引为12的群组,如下所示:

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"];
}

https://regex101.com/r/uT5eW0/1

答案 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的答案更适合获得价值