【问题标题】:Regex to exclude alpha-numeric characters正则表达式排除字母数字字符
【发布时间】:2017-09-11 17:50:13
【问题描述】:

我认为[^0-9a-zA-Z]* 不包括所有字母数字字母,但允许特殊字符、空格等。

使用搜索字符串 [^0-9a-zA-Z]*ELL[^0-9A-Z]* 我希望输出如下

ELL 
ELLs 
The ELL 
Which ELLs

但是我也得到以下输出

Ellis Island
Bellis

如何解决这个问题?

【问题讨论】:

  • @WiktorStribiżew 正则表达式应该捕获“ELL”和“ELLs”
  • 为什么要捕获这些子字符串?为什么不只是匹配?预期输出是什么?
  • @WiktorStribiżew 它是 python 程序的一部分,它读取文件名并根据关键字分配类别。 ELLELLs_ELL-ELLs-- 等将被分配一个类别。有时 ELL 和 ELL 周围有非字母数字字符,Regex 应考虑到这一点。
  • @WiktorStribiżew 仍在努力解决这个问题,即它没有捕获“ELLs”或_ELLs

标签: regex


【解决方案1】:

你可以使用

(?:\b|_)ELLs?(?=\b|_)

请参阅regex demo

如果它被_ 或非单词字符包围,或者在字符串的开头/结尾,它将找到ELLELLs

详情

  • (?:\b|_) - 匹配单词边界位置 (\b) 或 (|) 的非捕获交替组 _
  • ELLs? - 匹配 ELLELLs,因为 s? 匹配 1 或 0 s 字符
  • (?=\b|_) - 正向前瞻,需要在当前位置右侧出现字边界或 _

【讨论】:

    【解决方案2】:

    将 * 改为 +

    a * 表示任何数量,包括无。 A + 表示一个或多个。你可能想要的是一个单词边界:

    \bELL\b
    

    单词边界是 \w 和 \W (非单词字符)之间的位置,或者如果字符串以单词字符([0-9A-Za -z_])。更多关于此: What is a word boundary in regexes?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      相关资源
      最近更新 更多