RegEx用于从字符串中提取数字

时间:2009-12-18 10:59:51

标签: c# regex

我在一个目录中有一堆文件,大多数都是标题......

PO1000000100.doc或.pdf或.txt 其中一些是PurchaseOrderPO1000000109.pdf

我需要做的是提取PO1000000109的一部分。所以基本上PO后面有10个数字...... 我怎么能用正则表达式做到这一点?

(我要做的是对目录中的文件进行foreach循环,获取文件名,并通过正则表达式运行以获取PO号...)

我正在使用C# - 不确定这是否相关。

7 个答案:

答案 0 :(得分:2)

试试这个

String data = 
  Regex.Match(@"PO\d{10}", "PurchaseOrderPO1000000109.pdf", 
    RegexOptions.IgnoreCase).Value;

可以在ofc上添加一个Regex.IsMatch和相同的vars:)

答案 1 :(得分:2)

如果PO部分始终相同,您只需获取数字而无需使用正则表达式:

new string(theString.Where(c => char.IsDigit(c)).ToArray());

稍后您可以手动添加PO部分。

注意:我假设您的字符串中只有一个数字。如果您有"abc12345def678",那么您将获得"12345678",这可能不是您想要的。

答案 2 :(得分:1)


Regex.Replace(fileName, @"^.?PO(\d{10}).$", "$1");
把点放在点之后。

答案 3 :(得分:1)

string data="PurchaseOrderPO1000000109.pdf\nPO1000000100.doc";
MatchCollection matches = Regex.Matches(data, @"PO[0-9]{10}");
foreach(Match m in matches){
    print(m.Value);
}

结果

PO1000000109
PO1000000100

答案 4 :(得分:0)

此RegEx将从字符串\d*中获取所有数字。

如上所述here

答案 5 :(得分:0)

可能的正则表达式可能是:

^.*(\d{10})\.\D{3}$

答案 6 :(得分:0)

var re = new System.Text.RegularExpressions.Regex("(?<=^PurchaseOrder)PO\\d{10}(?=\\.pdf$)");
Assert.IsTrue(re.IsMatch("PurchaseOrderPO1234567890.pdf"));
Assert.IsFalse(re.IsMatch("some PurchaseOrderPO1234567890.pdf"));
Assert.IsFalse(re.IsMatch("OrderPO1234567890.pdf"));
Assert.IsFalse(re.IsMatch("PurchaseOrderPO1234567890.pdf2"));