我对正则表达式非常陌生,并且无法让我的头完全缠绕它。
我正在尝试写两个正则表达式 - 你需要告诉我他们是否可能。两者都基于VB.net语法。
正则表达式1: 我正在测试的字符串 - 磁盘大小:25,754,900,936字节
它有一些前导空格,但文字总是一样的。我试图提取出数字(25,754,900,936)。
我尝试了一些正则表达式,但我无法将所有内容都放在一行上。逗号搞砸了我并返回多个匹配(例如,\ d + \ W +给了我四个匹配,每个匹配用逗号分隔一组。)
我所做的最好的是[0-9 /,] *但是这给了我25个空匹配和一个匹配(在匹配19上)的数字。我需要这个匹配比赛1.
可行?看到一个正则表达式,我可以从字符串中提取这样的数字将非常有用。
正则表达式2:
同样的想法,但现在多线。
我正在测试的字符串 -
0 File(s) 0 bytes
1 File(s) 11,546 bytes
1 File(s) 259,584 bytes
3 File(s) 5,682 bytes
17218 File(s) 25,705,262,230 bytes
我需要最后一行(25,705,262,230)的总字节数。是否可以在多行搜索中执行此操作?同样的交易 - 文本总是一样的。
答案 0 :(得分:2)
对于你的第一个正则表达式只提取数字,试试这个:
(\d+,?)+
它将匹配一个或多个数字(0-9)的组,可选地后跟逗号(,?
),这些组会出现一次或多次。
对于您的多行字符串,如果您知道该字符串将始终以'bytes'结尾,请尝试以下操作:
(\d+,?)+(?=\s*bytes$)
这将再次匹配类似于第一个正则表达式,尽管该行必须以“字节”结尾,因为$
表示该行的结尾。然后,您需要提取捕获的值:
'Regex is your regular expression object containing the second regex
regex.Match([your string]).Value
答案 1 :(得分:0)
要提取数字,请使用以下正则表达式:
/Size on disk: ((?:\d+,?)+)/
然后提取第一个捕获的组。在JavaScript中:
var s = "Size on disk: 25,754,900,936 bytes";
var bytes = s.match(/Size on disk: ((?:\d+,?)+)/)[1];
// "25,754,900,936"
正则表达式(从内到外)
\d
- 找一个数字字符
+
- 好吧,好的,找到其中一个或多个,
- 后跟一个字面逗号
?
- ......好吧,也许;如果你找不到其中一个(?:…)
- 现在,把所有这些都当作一个我们不需要保存的小组来对待
+
- 允许该群体多次发生(…)
- 捕获所有结果并将其保存给我"Size on disk: "
在多行上,将正则表达式锚定到输入的末尾。再次,这是JavaScript中的一个示例:
var re = /((?:\d+,?)+) bytes$/m;
var total = multiline.match(re)[1];
您可以在此处看到它:http://jsfiddle.net/uFfsc/1/
由您来学习如何将.NET中的正则表达式锚定到输入的末尾。