正则表达式在食物的成分文本中查找“E 数字”

本文关键字:查找 数字 文本 正则表达式 | 更新日期: 2023-09-27 18:32:06

我正在做一个分析食品的项目。使用 VB.net,C#和使用MS SQL Server DB进行编程。

我现在需要在成分文本字段中找到每个出现的"E 数字"。(E 编号是食品添加剂的欧洲标准编码系统,请在此处查看维基百科)。

E 数字具有以下格式:

  1. 大写字母"E"(1 个字符)。
  2. 可选的 [空格](0 - 1 个字符)。
  3. 100 到 1600 范围内的三位或四位数字(3 - 4 个字符)。
  4. "
  5. a"到"f"(0 - 1 个字符)范围内的可选小写字母。
    使其总共有 4 到 7 个字符的长度。

*该数字通常括在括号中和/或立即与成分名称连接,然后(可能)在其前后不留任何空格或分隔符。

例如:E100、甲醛(E 240)、E300b、E 1234a、(E1321)。

我需要返回文本中的所有 E 数字(如上面的格式)。可以有很多。
有什么想法吗?

-从来没有正确学习正则表达式,因此提出了问题。

正则表达式在食物的成分文本中查找“E 数字”

您可以使用正则表达式模式E ?'d{3,4}[a-f]? 查看在线演示。

  • E ? - 必须以 E 开头,后跟一个可选空格(?使前面的空格可选)。
  • 'd{3,4} - 接下来的三或四个字符必须是数字
  • [a-f]? - 最后一个字符可以是 af 之间的任何字母

您可以像这样搜索所有匹配项:

foreach (Match m in Regex.Matches(input, pattern))
    Console.WriteLine(m.Value);

一个应该有效的表达式:

E)+(''s+)?(''d{4}|''d{3})+([a-f])?

捕获组 0:确保至少有 1 个大写字母 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++;
           }
         }
     }
}