使用正则表达式去除拖尾单元

时间:2012-01-15 14:51:52

标签: c# regex

让我们说原始文本是这样的:

12345 {unit}

那么删除{unit}部分只保留数字的正则表达式是什么?请注意,unit的长度可以是随机的。感谢。

编辑: 好吧,我曾考虑使用\ d +,但我想如果数字部分包含某种分隔符,例如它会失败,例如1000分隔符。因此,如果数字看起来像这样,12,345则模式\ d可能不会起作用。

8 个答案:

答案 0 :(得分:1)

如果您始终拥有该格式,我猜您不必使用RegExp。您可以在空格上拆分字符串,将空格前的字符串作为数字。

string original = "12345 {unit}";
string[] parts = original.Split(' ');
string yourNumber = parts[0];

答案 1 :(得分:1)

string extractValue(string input) {
  var result=Regex.Match(input,@"(\d+(?:,\d{3})*)\s";
  return (result.Success) ? result.Groups[0].Value : null;
}

此函数将在失败时返回null,否则匹配匹配的值字符串。

然后您还可以通过int.parse解析结果以获取int

int? extractIntValue(string input) {
  var result=Regex.Match(input,@"(\d+(?:,\d{3})*)\s";
  if (result.Success) return int.Parse(result.Groups[0].Value,System.Globalization.NumberStyles.AllowThousands|System.Globalization.NumberStyles.Integer);
  return null;
}

如果结果可能是十进制(而不是整数,则匹配行将读取

  var result=Regex.Match(input,@"(\d+(?:,\d{3})*(?:\.\d+))\s";

如果您使用的是十进制值,则可以使用相应的decimal.parse方法

答案 2 :(得分:1)

string[] sa = 
  { "12345 {unit}", "12345{unit}", "-123.45{unit}","-1,023.45{unit}",
    "12345 cm", "99%", "99.1 %", "0.1234{unit}","-0.1234{unit}",
    "12345", "123.45", "12,345.67 {unit}"
  };

foreach (string s in sa) {
  Console.WriteLine("Numeric=[" + Regex.Replace(s, @"[^\d]+$", "") + "], Unit=[" + Regex.Match(s, @"[^\d]+$") + "]");
}

我的逻辑是仅检测值后面的无数字。前面和中间的负号( - ),逗号,点将保持不变。

此通用逻辑可用于仅剥离值或仅用于单位。

Numeric=[12345], Unit=[ {unit}]
Numeric=[12345], Unit=[{unit}]
Numeric=[-123.45], Unit=[{unit}]
Numeric=[-1,023.45], Unit=[{unit}]
Numeric=[12345], Unit=[ cm]
Numeric=[99], Unit=[%]
Numeric=[99.1], Unit=[ %]
Numeric=[0.1234], Unit=[{unit}]
Numeric=[-0.1234], Unit=[{unit}]
Numeric=[12345], Unit=[]
Numeric=[123.45], Unit=[]
Numeric=[12,345.67], Unit=[ {unit}]

答案 3 :(得分:0)

Regex.Match(input, @"([0-9]+) ")

Regex.Match(input, @"(\d+) ")

仅匹配数字部分

答案 4 :(得分:0)

“单位”部分究竟是由什么组成的?它可以有数字吗?如果不是,那么这可能有效:

string numberPart = Regex.Match(@"\d+").Value;

答案 5 :(得分:0)

此外,简单的字符串操作就足够了。取起始数字序列:

string text = "12345 {unit}";
string result = new string (text.Trim().TakeWhile(c => char.IsDigit(c)).ToArray());

答案 6 :(得分:0)

如果您想捕获数字,只有{unit}部分可以使用此模式:

(\d+)(?:\s+\{\w+\})

?:表示它不会捕获空间和单位。

答案 7 :(得分:0)

正则表达式[0-9][,0-9]+[0-9]应该可以解决问题。这将接受数字和逗号作为分隔符。