我正在开展一个分析食品的项目。在VB.net,C#中编程并使用MS SQL Server DB。
我现在需要在成分文本字段中找到每个“E编号”。 (E数字是欧洲标准的食品添加剂编码系统,se Wikipedia here)。
E号码具有以下格式:
*数字通常括在括号中和/或立即与成分名称连接,然后(可能)在其之前或之后不留任何空格或分隔符。
示例:E100,甲醛(E 240),E300b,E 1234a,(E1321)。
我需要返回文本中的所有E编号(如上格式)。可能会有很多 有什么想法吗?
- 无论如何正确地学习RegExp,因此问题。
答案 0 :(得分:3)
您可以使用正则表达式模式E ?\d{3,4}[a-f]?
请参阅online demo。
E ?
- 必须以E开头,后跟可选空格(?
使前面的空格可选)。\d{3,4}
- 接下来的三个或四个字符必须是数字[a-f]?
- 最后一个字符可以选择是 a 和 f 之间的任何字母您可以搜索所有匹配项:
foreach (Match m in Regex.Matches(input, pattern))
Console.WriteLine(m.Value);
答案 1 :(得分:0)
应该有效的表达式:
(E)+(\ S +)(\ d {4} | \ d {3})?+([A-F])
捕获组0 :确保至少有1个Capital E
捕获组1 :如果有空格,则尽可能多的空格
捕获第2组:4位或3位数
捕获第3组:a和f之间的可选字母。
试试这个C#代码。
using System;
using System.Text.RegularExpressions;
namespace myapp
{
class Class1
{
static void Main(string[] args)
{
String sourcestring = "source string to match with pattern";
Regex re = new Regex(@"(E)(\s+)?(\d{4}|\d{3})+([a-f])?");
MatchCollection mc = re.Matches(sourcestring);
int mIdx=0;
foreach (Match m in mc)
{
for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
{
Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
}
mIdx++;
}
}
}
}