我在一个目录中有一堆文件,大多数都是标题......
PO1000000100.doc或.pdf或.txt 其中一些是PurchaseOrderPO1000000109.pdf
我需要做的是提取PO1000000109的一部分。所以基本上PO后面有10个数字...... 我怎么能用正则表达式做到这一点?
(我要做的是对目录中的文件进行foreach循环,获取文件名,并通过正则表达式运行以获取PO号...)
我正在使用C# - 不确定这是否相关。
答案 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"));