C# 从匹配不同模式的行中提取单词
我正在监视收到的电子邮件主题,每个主题可能都包含一个特别格式化的代码,我用它来引用其他内容 这些代码可以在字符串中的任何位置,有时甚至根本不存在,因此我遇到的问题是我缺乏正则表达式技能(我认为这是这个解决方案的最佳选择?) 主题的一个例子是:C# 从匹配不同模式的行中提取单词,c#,regex,string,C#,Regex,String,我正在监视收到的电子邮件主题,每个主题可能都包含一个特别格式化的代码,我用它来引用其他内容 这些代码可以在字符串中的任何位置,有时甚至根本不存在,因此我遇到的问题是我缺乏正则表达式技能(我认为这是这个解决方案的最佳选择?) 主题的一个例子是: "Please refer to reference MZ5051CLA" or "Attention for Mr Danshi, RE. 11123MTX" 我希望在这些场景中提取的代码是“MZ5051CLA”和“11123MTX” 是否有一种简单的
"Please refer to reference MZ5051CLA"
or
"Attention for Mr Danshi, RE. 11123MTX"
我希望在这些场景中提取的代码是“MZ5051CLA”和“11123MTX”
是否有一种简单的方法来评估整个主题,并提取任何只与代码匹配的单词
我在这里已经研究了各种解决我问题的方法,但它们要么过于复杂,要么我不能很好地理解
编辑:
正如ShashishChandra指出的,这个想法是监视多个邮箱,每个邮箱都有自己的代码格式。所以我的想法是为每个邮箱实现一个正则表达式设置
也许这一点在开始时很重要,因为在一个正则表达式中捕获所有格式的解决方案是行不通的。对此表示歉意。下面的正则表达式将只匹配第一个字符串
MZ5051CLA
\bMZ\d+CLA\b
但这将匹配两个字符串MZ5051CLA
和11123MTX
\b[A-Z0-9]+$
一行最后一行的所有字母数字字符都匹配
这将获得字母数字字符串,该字符串以MZ
开头,以CLA
结尾,或以数字开头,以mtx
(?:\b[A-Z0-9]+$|\b\d+MTX\b)
下面的正则表达式将只匹配第一个字符串
MZ5051CLA
\bMZ\d+CLA\b
但这将匹配两个字符串MZ5051CLA
和11123MTX
\b[A-Z0-9]+$
一行最后一行的所有字母数字字符都匹配
这将获得字母数字字符串,该字符串以MZ
开头,以CLA
结尾,或以数字开头,以mtx
(?:\b[A-Z0-9]+$|\b\d+MTX\b)
试试这个正则表达式:
^.*(?:(MZ\d+CLA)|RE\.\s+(\d+MTX))$
试试这个正则表达式:
^.*(?:(MZ\d+CLA)|RE\.\s+(\d+MTX))$
两个代码在一个模式中 似乎代码必须至少包含一个大写字母和一个数字。对于这种模式,通常使用密码验证技术,我建议:
\b(?=[A-Z0-9]*[A-Z])[A-Z0-9]*[0-9][A-Z0-9]*
在中,查看如何仅匹配正确的组。当然,误报是可能的
参考
\b(?=[A-Z0-9]*[A-Z])[A-Z0-9]*[0-9][A-Z0-9]*
在中,查看如何仅匹配正确的组。当然,误报是可能的
参考
因此,在这种情况下,如果您不介意误报,请使用:
/^(?=.[0-9])(?=.[A-Z])([A-Z0-9]+)$/
。一般来说,这会很有效。因此,在这种情况下,如果您不介意误报,那么请使用:/^(?=.[0-9])(?=.[A-Z])([A-Z0-9]+)$/
。一般来说,这会很有效。你说它总是以MZ开头,那么为什么你想要第二个呢?根据我从你的问题中了解到的情况,你想提取一个单词,它应该只包含大写字母(>1)和数字(>1)。用这些作为标准,可以很容易地形成正则表达式。见->[.@drminnaar-如果我错了,请纠正我,可能不止这两种情况,对吧,例如RR12RA2
或001A3
。因此,在这种情况下,你最好使用NLP算法,而不是仅仅找到正则表达式并匹配它们。那会好得多。对于这类表达式,正则表达式通常会给出许多误报一次。@ShashishChandra正确-我问题背后的想法(也许我应该提到这一点),就是有许多监视器在不同的邮箱上运行它们自己的计算。对每个邮箱使用它自己的正则表达式字符串进行某种设置将允许我只查找与邮箱上下文相关的代码。我对NLP不太熟悉,但快速浏览一下,如果我不介意的话,它看起来有点复杂产生误报(因为代码稍后会在工作流中进行验证)。您说过它总是以MZ开头,那么您为什么要使用第二个?根据我从您的问题中了解到的情况,您希望提取一个单词,该单词应同时包含大写字母(>1)和数字(>1)只有.Regex可以很容易地用这些作为标准形成。请参阅->[.@drminnaar-如果我错了,请纠正我,可能不止这两种情况,对吧,例如RR12RA2
或001A3
。因此,在这种情况下,你最好使用NLP算法,而不是仅仅找到正则表达式并匹配它们。那会好得多。对于这类表达式,正则表达式通常会给出许多误报一次。@ShashishChandra正确-我问题背后的想法(也许我应该提到这一点),就是有许多监视器在不同的邮箱上运行它们自己的计算。对每个邮箱使用它自己的正则表达式字符串进行某种设置将允许我只查找与邮箱上下文相关的代码。我对NLP不太熟悉,但快速浏览一下,如果我不介意的话,它看起来有点复杂产生误报(因为代码稍后会在工作流中进行验证)。我认为问题不只是针对这两种特定情况,它更为通用,而且,您的第二个正则表达式也将与例如添加的11111
和AAAA
@ShashishChandra匹配。现在它似乎是通用的。是的,编辑后,它不仅适用于这两种特定情况,而且适用于数字和大写字母字母。例如,A
或我的年龄是23
,你