从匹配不同模式的行中提取单词

时间:2014-07-07 08:39:48

标签: c# regex string

我正在监控传入的电子邮件主题,每个主题可能包含一个特别格式化的代码,我之前用它来引用其他内容。

这些代码可以在字符串中的任何位置,有时根本不存在 - 所以我遇到的问题是我缺乏RegEx技能(我认为这是此解决方案的最佳选择?)。

主题的一个例子是:

"Please refer to reference MZ5051CLA"
or
"Attention for Mr Danshi, RE. 11123MTX"

我想在这些场景中提取的代码是“MZ5051CLA”和“11123MTX”。

The format of MZ5051CLA will be:
  - Always starts with "MZ"
  - Follows by a number
  - Always ends with "CLA"

是否有一种简单的方法可以整体评估主题并提取与代码匹配的任何单词?

我已经在SO上查看了我的问题的各种解决方案,但它们要么过于复杂,要么与之无关。

编辑:

正如ShashishChandra指出的那样,我们的想法是监控多个邮箱,每个邮箱都有自己的代码格式。所以我的想法是为每个邮箱实现一个正则表达式设置。

最初提及这一点很重要,因为在一个正则表达式中捕获所有格式的解决方案将无效。为此道歉。

4 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

^.*(?:(MZ\d+CLA)|RE\.\s+(\d+MTX))$

Regular expression visualization

Demo

答案 1 :(得分:1)

以下正则表达式只匹配第一个字符串MZ5051CLA

\bMZ\d+CLA\b 

DEMO

但这会匹配字符串MZ5051CLA11123MTX

\b[A-Z0-9]+$

匹配最后一行的所有字母数字字符。

DEMO

这会为您提供字母数字字符串,该字符串以MZ开头,以CLA结尾,或以数字开头,以mtx结尾

(?:\b[A-Z0-9]+$|\b\d+MTX\b)

DEMO

答案 2 :(得分:1)

一种模式中的两种代码

似乎代码必须包含至少一个大写字母和至少一个数字。对于这种模式,通常使用密码验证技术,我建议:

\b(?=[A-Z0-9]*[A-Z])[A-Z0-9]*[0-9][A-Z0-9]*

the demo中,查看如何仅匹配正确的组。当然,误报是可能的。

<强>参考

答案 3 :(得分:0)

因此,在这种情况下,如果您不介意误报,请使用:/^(?=.*[0-9])(?=.*[A-Z])([A-Z0-9]+)$/。这一般都会很好。