如何从C#中的字符串中获取两个数值

时间:2016-08-11 08:03:51

标签: c# .net regex string

我有一个这样的字符串:

  

X LIMITED COMPANY(52100000/58447000)

我想单独提取 X LIMITED COMPANY 52100000 58447000

我正在提取 X LIMITED COMPANY

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

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

3 个答案:

答案 0 :(得分:1)

尝试使用替代|)的正则表达式:

  • 字母符号(但不是数字)[\w-[\d]][\w\s-[\d]]+)
  • 仅限数字([0-9]+)

E.g。

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]+,以便跳过仅包含分隔符的匹配项(例如" "

答案 1 :(得分:1)

尝试使用命名组:

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

答案 2 :(得分:0)

如果格式已修复,您可以尝试:

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);

这会将所有内容与开括号匹配,并将其放入命名组&#34; name&#34;。然后它匹配括号内的两个数字,用&#34; /&#34;分隔;并将它们放入名为&#34; n1&#34;和&#34; n2&#34;分别