我有以下字符串
Fat mass loss was 2121,323.222 greater for GPLC (2–2.4kg vs. 0.5kg)
我想抓拍
212,323.222
2-2.24
0.5
即。我想要字符串中的上述三个结果,
任何人都可以帮助我使用这个正则表达式
答案 0 :(得分:1)
我注意到 2-2.4kg 中的连字符不是连字符,它是unicode 0x2013“DASH”。
所以,这是C#中的另一个正则表达式
@"[0-9]+([,.\u2013-][0-9]+)*"
测试
MatchCollection matches = Regex.Matches("Fat mass loss was 2121,323.222 greater for GPLC (2–2.4kg vs. 0.5kg)", @"[0-9]+([,.\u2013-][0-9]+)*");
foreach (Match m in matches) {
Console.WriteLine(m.Groups[0]);
}
结果如下,我的控制台不支持打印unicode char 2013,所以它的“?”但它恰当匹配。
2121,323.222
2?2.4
0.5
答案 1 :(得分:0)
好的,直到现在我才注意到C#标签。我会留下答案,但我知道这不是你的预期,看看你是否能用它做点什么。也许标题应该提到编程语言?
不确定
Fat mass loss was (.*) greater for GPLC \((.*) vs. (.*)kg\)
在\ 1,\ 2和\ 3中查找子字符串。 如果对于Emacs,请交换所有括号并转义括号。
答案 2 :(得分:0)
这样的事情怎么样:
^.*((?:\d+,)*\d+(?:\.\d+)?).*(\d+(?:\.\d+)?(?:-\d+(?:\.\d+))?).*(\d+(?:\.\d+)).*$
我认为有点笼统。我有点担心。*贪婪。
答案 3 :(得分:0)
脂肪量减少2121,323.222更大 对于GPLC(2-2.4kg对0.5kg)
广义提取器:
/\D+?([\d\,\.\-]+)/g
说明:
/ # start pattern
\D+ # 1 or more non-digits
( # capture group 1
[\d,.-]+ # character class, 1 or more of digits, comma, period, hyphen
) # end capture group 1
/g # trailing regex g modifier (make regex continue after last match)
抱歉,我不知道c#是否足以完整写入,但该模式应该正好插入。
请参阅:http://www.radsoftware.com.au/articles/regexsyntaxadvanced.aspx了解一些实施示例。
答案 4 :(得分:0)
看起来您正在尝试查找字符串中的所有数字(可能在数字中使用逗号),以及所有数字范围,例如“2-2.4”。这是一个应该有效的正则表达式:
\d+(?:[,.-]\d+)*
从C#3开始,您可以像这样使用它:
var input = "Fat mass loss was 2121,323.222 greater for GPLC (2-2.4kg vs. 0.5kg)";
var pattern = @"\d+(?:[,.-]\d+)*";
var matches = Regex.Matches(input, pattern);
foreach ( var match in matches )
Console.WriteLine(match.Value);
答案 5 :(得分:0)
我出现了类似这样的暴行:
-?\d(?:,?\d)*(?:\.(?:\d(?:,?\d)*\d|\d))?(?:[–-]-?\d(?:,?\d)*(?:\.(?:\d(?:,?\d)*\d|\d))?)?
巫婆-?\d(?:,?\d)*(?:\.(?:\d(?:,?\d)*\d|\d))?
重复两次,中间有–
(注意这是一个长连字符)。
这应该处理数字之外的点和逗号,例如: hello,23,45.2-7world
- 将捕获 23,45.2-7
。
答案 6 :(得分:0)
嗯,这是一个棘手的问题,特别是因为输入字符串包含unicode字符 - (EN DASH)而不是 - (HYPHEN-MINUS)。因此,匹配原始字符串中的数字的正确正则表达式为:
\d+(?:[\u2013,.]\d+)*
如果您想要更通用的方法,那就是:
\d+(?:[\p{Pd}\p{Pc}\p{Po}]\d+)*
匹配短划线标点符号,连接符标点符号和其他标点符号。有关这些内容的详情,请参阅here。
C#中的实现如下所示:
string input = "Fat mass loss was 2121,323.222 greater for GPLC (2–2.4kg vs. 0.5kg)";
try {
Regex rx = new Regex(@"\d+(?:[\p{Pd}\p{Pc}\p{Po}\p{C}]\d+)*", RegexOptions.IgnoreCase | RegexOptions.Multiline);
Match match = rx.Match(input);
while (match.Success) {
// matched text: match.Value
// match start: match.Index
// match length: match.Length
match = match.NextMatch();
}
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
答案 7 :(得分:0)
我得到了解决问题的方法。
以下是给出我想要的结果的正则表达式:
(([0-9]+)([–.,-]*))+
答案 8 :(得分:0)
我们试试这个:
(?=\d)([0-9,.-]+)(?<=\d)
它捕获仅包含:
的所有表达式它适用于单个数字表达式,不包括开头或尾随[。, - ]。
希望这有帮助。