需要一个正则表达式来匹配三个字符串

时间:2020-03-06 15:04:34  来源:igfitidea点击:

我通常远离"正则表达式",因为我很少发现它们有很好的用途。但是在这种情况下,我认为我别无选择。

对于以下情况,我需要使用正则表达式。我将看三个字符串。如果第一个字符为" 1-9"或者字母o,n,d(低或者大),第二个字符为" 1,2或者3",第三个字符为" 0-9",则将匹配。

有人可以帮我吗?

解决方案

[1-9ondOND][123][0-9]

我省略了^$(字符串标记的开头和结尾),因为我们说过我们将拥有三个字符的字符串,但是包括它们没有什么害处,它们可以提高速度,但并不是那样。这么短的输入量很大。

当然,这假设我们使用的语言和语言环境中,ond的大写字母等效为OND。如果不是,则需要告诉正则表达式解释器忽略大小写。该机制因语言/框架而异。

对于python,我们可以使用类似以下内容的代码:

re.match('[1-9ond][123][0-9]', inputstring, re.IGNORECASE)

re.match在字符串的开头强制匹配,因此在任何情况下都不需要^。

Perl / ^ [1-9ondOND] [1-3] [0-9] $ /

^ =字符串开头,$ =字符串结尾

在基于PREG的系统中(如今大多数是这样):

^(?:[1-9]|[ond])[1-3][0-9]$

某些系统需要开始/结束标记(例如PHP,Perl,但不包括.NET),如果我们这样做,则最终会像这样:

/^(?:[1-9]|[ond])[1-3][0-9]$/

其他答案略有不同。将输入限制为完全匹配的文本。

^[1-9ondOND][123][0-9]$

[1-9ond] [123] [0-9]

这是测试正则表达式的有用地方。