正则表达式,用于排除仅与数字匹配的特殊标识符

时间:2017-12-12 16:28:53

标签: regex

我正在搜索找到以下项目的正则表达式模式:

开始,停止,停止1,1Hz,E1.1,A3.2,Emergeny_Stop

最少1个字符,最多24个字符。 我的解决方案是:

[0-9a-zA-Z_.]{1,24}

现在我搜索一个排除只包含数字的项目的修改:

我想忽略以下项目:

11,222,5.2等

最后,我想忽略以下开头的项目: 0X 16#

是否有正则表达专业人士可以帮助我? 非常感谢。

P.S。这是一个不错的测试环境: https://regex101.com/

1 个答案:

答案 0 :(得分:0)

代码

See regex in use here

^(?!0x)(?=.*?[a-z])[\w.]{1,24}$

或者,如果您的正则表达式引擎支持Unicode类,则可以使用:

See regex in use here

^(?!0x)(?=.*?\p{L})[\p{L}\p{N}_.]{1,24}$

如果您只想否定0x但想要包含0X,则可以使用以下内容(假设您的正则表达式引擎支持内联修饰符):

See regex in use here

^(?!0x)(?i)(?=.*?[a-z])[\w.]{1,24}$

结果

输入

Start
Stop
Stop1
1Hz
E1.1
A3.2
Emergeny_Stop

11
222
5.2
0x123
16#abc123

输出

以下结果仅包含匹配项。

Start
Stop
Stop1
1Hz
E1.1
A3.2
Emergeny_Stop

说明

  • ^在行首处断言位置
  • (?!0x)否定前瞻确保后续内容不匹配0x
  • (?=.*?[a-z])确保后面包含一个字母的正面预测(请注意,不区分大小写的i标志已启用,因此这也会搜索大写变体)
  • [\w.]{1,24}匹配集合中的任何字符(单词字符或点)1到24次
  • $断言行尾的位置