如何在c#中从字符串中获得两个数值

本文关键字:两个 字符串 | 更新日期: 2023-09-27 18:02:07

我有一个这样的字符串:

X有限公司(521000000/58447000)

我想分别提取X LIMITED COMPANY5210000058447000

我像这样提取X LIMITED COMPANY:

companyName = Regex.Match(mystring4, @"[a-zA-Z's]+").Value.Trim(); 

但我坚持提取数字,他们可以是1,2或更大的数字在这个例子中。你能告诉我如何提取这些数字吗?谢谢。

如何在c#中从字符串中获得两个数值

尝试替换| ()的正则表达式:

  • 任意文字符号(但不包括数字)['w-['d]]['w's-['d]]+)
  • 数字([0-9]+)

string mystring4 = @"AKASYA CAM SANAYİ VE TİCARET LİMİTED ŞİRKETİ(52100000 / 58447000)";
string[] values = Regex
  .Matches(mystring4, @"(['w-['d]]['w's-['d]]+)|([0-9]+)")
  .OfType<Match>()
  .Select(match => match.Value.Trim())
  .ToArray(); 

测试
// X LIMITED COMPANY
// 52100000
// 58447000  
Console.Write(string.Join(Environment.NewLine, values)); 

我建议将初始模式[a-zA-Z's]+更改为[a-zA-Z][a-zA-Z's]+,以便跳过仅包含分隔符的匹配(例如" ")

尝试使用命名组:

var s = "X LIMITED COMPANY (52100000 / 58447000)";
var regex = new Regex(@"(?<CompanyName>[^'(]+)'((?<Num1>'d+)'s*/'s*(?<Num2>'d+)')");
var match = regex.Match(s);
var companyName = match.Groups["CompanyName"];

如果格式是固定的,您可以尝试这样做:

var regex = new Regex(@"^(?<name>[^'(]+)'((?<n1>'d+)/(?<n2>'d+)')");
var match = regex.Match(input);
var companyName = match.Groups["name"].Value;
var number1 = Convert.ToInt64(match.Groups["n1"].Value);
var number2 = Convert.ToInt64(match.Groups["n2"].Value);

匹配左括号之前的所有内容,并将其放入命名组"name"中。然后,它匹配括号内的两个数字,用"/"分隔,并将它们分别放入名为"n1"answers"n2"的组中。