如何使用c#提取括号之间的所有字符串?

eVo*_*lve 6 c# regex split

如果我有一个字符串,例如:

“你的id是(1),你的号码是(0000000000)”

将这些字符串提取到字符串列表中的最佳方法是什么。括号之间的数字可以增加数字,因此搜索括号之间的字符串是一种更好的技术。

我可以使用下面的代码来提取括号之间的第一个字符串。

var myString = "You id is (1) and your number is (0000000000)";
var firstNumberBetweenBrackets = myString.Split('(', ')')[1]; // would return 1
Run Code Online (Sandbox Code Playgroud)

Sla*_*jic 7

这是一个 LINQ 解决方案:

var result = myString.Split().Where(x => x.StartsWith("(") && x.EndsWith(")")).ToList();
Run Code Online (Sandbox Code Playgroud)

存储在 中的值result

result[0] = (1)
result[1] = (0000000000)
Run Code Online (Sandbox Code Playgroud)

如果您只想要没有括号的数字,请使用:

var result = myString.Split().Where(x => x.StartsWith("(") && x.EndsWith(")"))
                     .Select(x=>x.Replace("(", string.Empty).Replace(")", string.Empty))
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

存储在 中的值result

result[0] = 1
result[1] = 0000000000
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用,返回一个空列表 (4认同)

Hay*_*tam 6

您可以为此使用正则表达式(https://regex101.com/r/T4Sdik/1):

Regex regex = new Regex(@"\(([^()]+)\)*");

foreach (Match match in regex.Matches("You id is (1) and your number is (0000000000)")
{
    Console.WriteLine(match.Value);
}
Run Code Online (Sandbox Code Playgroud)

这将打印:

1
0000000000
Run Code Online (Sandbox Code Playgroud)

  • 是的,我测试了你的代码并打印了括号 (2认同)

Wik*_*żew 6

如果您只想获取括号内的数字字符串,您可以使用

var results = Regex.Matches(s, @"\((\d+)\)")
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

结果位于第 1 组中,因此您需要使用 来访问它们m.Groups[1].Value

正则表达式详细信息

  • \(- 匹配文字(
  • (\d+)-捕获组1:一个或多个(由于+量词)数字(您可以使用[0-9]而不是\d仅匹配 ASCII 数字,或使用RegexOptions.ECMAScript
  • \)- 字面意思)

请参阅此处的在线 C# 演示和正则表达式演示:

在此输入图像描述