我需要帮助来解析一些信息从大量的文本,基本上我是导入一个PSD文件,并希望从其中分析一些数据。
文本中有字符串,如下所示:
\r\£78876随机文本字符串75£
现在,我想要做的是抓取符合这种格式的所有字符串(可能开始的"\r\n“和结尾的”at“可以是分隔符),并在开始时获取代码(j78876)和在末尾的价格(75)。注:价格可能比2位数更多。
然后,我想获取代码,如j78876和每个字符串的价格,这是因为它们会出现很多次(不同的代码和价格)。
有人能想出办法吗?
我对Regex不是很精通,所以指导会很棒。
谢谢。
注意:下面是实际文本的片段(实际文件中有更多内容)。
3 3Com/H3C LibelléRemarque Prix en欧元\r\nJ9449A HP V1810-8G开关139,00\r\nJ9450A HP V 1810-24g开关359,00\r \n边缘开关-管理的\r\nHP层2开关-管理的堆栈和底盘\r\nHP开关2510系列\r\réréréféréfé3Com/H3C LibelléRemarque Prix en欧元\r\nJ9019B HP E2510-24开关359 \nJ9020A HP E2510-48 599开关\r 9Hp 9Hp 27910 E10E10变送器nHP交换机2520系列\r\nRérérence 3 3Com/H3C LibelléRemarque Prix en en\nJ9137A HP E 2520-8-8-PoE开关489,00\r\nJ9138A HP E2520-24-PoE开关779,00HP E2520-8G-PoE 9299A HP E2520-24G-POJ 9299A HP E2520-24g-PoE开关1 569,r\nHP层2和3开关-托管堆栈和底盘- RBP仅为推荐价格。\r\nR开关2600系列\réréférence Ancienne
更新我发现如下:
[\\r\\n](\w\d+\w).*?(\d+,\d\d)[\\r\\n]
在regex浏览器测试器中为我工作过,但不会在我的C#代码中工作。
Regex reg = new Regex(@"[\\r\\n](\w\d+\w).*?(\d+,\d\d)[\\r\\n]", RegexOptions.IgnoreCase);
Match matched = reg.Match(str);
if (matched.Success)
{
string code = matched.Groups[1].Value;
string currencyAmt = matched.Groups[2].Value;
}
最后更新:在浏览器测试人员中,我不得不双转义\r\n --在我的代码中,这是不必要的。然后,为了循环分组,我使用了循环答案。
foreach (Match match in Regex.Matches(content, @"[\r\n](?<code>\w\d+\w).*?(?<price>\d+,\d\d)[\r\n]", RegexOptions.IgnoreCase))
{
string code = match.Groups["code"].Value;
string currencyAmt = match.Groups["price"].Value;
}
发布于 2011-03-22 09:29:09
我会使用命名组来更容易地识别组。表达式的?<code>
部分标识组。
您将希望使用匹配,正如您所说的,在您的文本中会出现几个匹配的模式。这会把它们都循环起来。
foreach ( Match match in Regex.Matches(text, @"\r\n(?<code>\S+).*?(?<price>\d+)£") )
{
string code = match.Groups["code"].Value;
string currencyAmt = match.Groups["price"].Value;
Console.WriteLine(code);
Console.WriteLine(currencyAmt);
}
发布于 2011-03-22 09:09:20
Regex reg = new Regex(@"\r\n([a-z]\d+\w)\s.*\s(\d+\,?\d+?)\r\n", RegexOptions.IgnoreCase);
string productCode, productCost;
foreach (Match match in reg.Matches(str))
{
productCode = match.Groups[1].Value;
productCost = match.Groups[2].Value;
//do something with values here
}
因为我原来的答案是错的。
根据你的样本,以上作品。
对新regex第一个参数的快速Regex解释(:
@:使我的字符串常量,使我不必在任何地方添加额外的转义符。
\n:从。
( as \d+\w) \s :与您的产品代码匹配,我使用\s对其进行了框架化,因为它似乎是一个一致的空白。
.*:匹配您的随机产品描述字符串。
\s(\d+\,?\d+?):匹配空格,然后是第二次捕获某种货币。
结束于。
如果您提供了一个更大的示例数据集,我可以微调regex。
发布于 2011-03-22 09:06:10
好吧,你的问题是一个移动的目标。实际的文本示例(与您的问题相矛盾)中没有£。以下是一个经过调整的表达:
new Regex(@"\r\n(\w+?).*?\s+(\d+?,\d\d)")
在散文中(这毕竟是一个学习站点):匹配"\r\n“,后面跟着任何字母数字,直到您到达空格为止,然后是任何东西,直到您点击空格,后面跟着一个数字,后面有两个数字的逗号。用斜体表示的部分被捕获。
正如我所说,我不做Obj,因此不能测试它。关于如何使用它,请参见这些C#文档 (以及这里的其他答案)。
https://stackoverflow.com/questions/5395016
复制相似问题