正则表达式在食物的成分文本中查找“E 数字”
本文关键字:查找 数字 文本 正则表达式 | 更新日期: 2023-09-27 18:32:06
我正在做一个分析食品的项目。使用 VB.net,C#和使用MS SQL Server DB进行编程。
我现在需要在成分文本字段中找到每个出现的"E 数字"。(E 编号是食品添加剂的欧洲标准编码系统,请在此处查看维基百科)。
E 数字具有以下格式:
- 大写字母"E"(1 个字符)。
- 可选的 [空格](0 - 1 个字符)。
- 100 到 1600 范围内的三位或四位数字(3 - 4 个字符)。 "
- a"到"f"(0 - 1 个字符)范围内的可选小写字母。
使其总共有 4 到 7 个字符的长度。
*该数字通常括在括号中和/或立即与成分名称连接,然后(可能)在其前后不留任何空格或分隔符。
例如:E100、甲醛(E 240)、E300b、E 1234a、(E1321)。
我需要返回文本中的所有 E 数字(如上面的格式)。可以有很多。
有什么想法吗?
-从来没有正确学习正则表达式,因此提出了问题。
您可以使用正则表达式模式E ?'d{3,4}[a-f]?
查看在线演示。
-
E ?
- 必须以 E 开头,后跟一个可选空格(?
使前面的空格可选)。 -
'd{3,4}
- 接下来的三或四个字符必须是数字 -
[a-f]?
- 最后一个字符可以是 a 和 f 之间的任何字母
您可以像这样搜索所有匹配项:
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++;
}
}
}
}