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

Posted

技术标签:

【中文标题】正则表达式在食品成分文本中查找“E 数字”【英文标题】:Regexp to find "E numbers" in ingredients-texts of food 【发布时间】:2016-05-03 18:11:44 【问题描述】:

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

我现在需要在成分文本字段中找到每个出现的“E 数字”。 (E 编号是食品添加剂的欧洲标准编码系统,参见 Wikipedia here)。

E 号码具有以下格式:

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

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

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

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

-从来没有好好学习过正则表达式,所以这个问题。

【问题讨论】:

您已经非常清楚地描述了您的需求,但这不是一个请别人为您编写代码的网站。请阅读How to ask 【参考方案1】:

您可以使用正则表达式模式E ?\d3,4[a-f]? 请参阅online demo。

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

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

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

【讨论】:

很好的解决方案,干净,我们会解释 Doggart 先生!这应该是公认的答案!也很好地抓住了接受的答案,因为它会像你提到的那样失败。 我会使用\s而不是实际空间@ @Jeroen 我考虑过,但这将匹配任何空白字符。由于根据 OP 的规范只是一个空格(而不是制表符或换行符等),因此我选择了更严格的要求。 @StevenDoggart 够公平的!我已经习惯了规范说space 并找到各种其他不可打印的东西,我只是养成了使用\s 的习惯【参考方案2】:

应该起作用的表达式:

(E)+(\s+)?(\d4|\d3)+([a-f])?

Capture Group 0:确保至少有 1 个 Capital E

捕获组 1:如果有空格,则尽可能多的空格

捕获组 2:4 位或 3 位数字

Capture Group 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+)?(\d4|\d3)+([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++;
           
         
     

【讨论】:

感谢一百万!运行起来既漂亮又快速! 加号字符不应该在那里。例如,您的模式当前的方式,它将匹配 EE123123 感谢史蒂文的评论。你说的对。我将我的 RegEx 更新为仅匹配 1 个 E。

以上是关于正则表达式在食品成分文本中查找“E 数字”的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式查找/替换不同长度的文本

notepad正则怎么替换其中一部分

是否有任何正则表达式用于从文本中查找和提取字符串

正则表达式查找文本中出现的所有占位符

正则表达式在Notepad ++中查找/替换多个文本

正则表达式 最近在做文本清洗,遇到(,,!或者?!!,),想要清除第一个逗号后面的所有多余标点符号