正则表达式用于选择至少带有两个下划线的单词



我正在尝试解析一个文本文档,其中包含一些带有下划线的单词。

我正在寻找正则表达式匹配,但目前失败了。

我正在查看(逐行(具有至少两个下划线的单词或至少具有两个下划线和正斜杠+至少三位数字的单词。

我已经到了

([a-zA-Z]+(?:_{2,}[a-zA-Z]+)*)

正确的匹配示例是

VOK17_05_530_526002 *(has atleast than two underscores)*
VIE_ROMS_002 *(has atleast than two underscores)*
VOK_OVSZ_001/002 *(has atleast  two underscores and a forward slash + three digits)*

输入样本

VOK17_05_530_526002 502 504 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526002 401 401 LGCU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526002 510 513 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526002 515 515 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526003 503 506 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002

我正在尝试我的正则表达式@https://regex101.com/r/yToVtc/1

如果有人能在这里帮忙,我将不胜感激。

您可以使用

b[A-Za-z0-9]+(?:_[a-zA-Z0-9]+)+(?:_[0-9]{3,})+(?:_[a-zA-Z0-9]+)*(?:/[0-9]+)?b

在部分

  • b单词边界
  • [A-Za-z0-9]+匹配1+次列出的任何
  • 次数
  • (?:_[a-zA-Z0-9]+)+重复 1+ 次下划线和 1+ 次列出的任何项
  • (?:_[0-9]{3,})+至少匹配第二个下划线和 3 个或更多数字
  • (?:_[a-zA-Z0-9]+)*重复 0+ 次和下划线以及列出的任何一项
  • (?:/[0-9]+)?匹配可选的/和 1+ 位数字
  • b字界

正则表达式演示

使用这个:

b[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+){2,}(?:/d{3})?b

解释:

b                  # word boundary
[a-zA-Z0-9]+        # 1 or more alphanum
(?:                 # non capture group
_                 # underscore
[a-zA-Z0-9]+      # 1 or more alphanum
){2,}               # end group, must appear 2 or more times
(?:                 # non capture group
/                 # a slask
d{3}             # 3 digits
)?                  # end group, optional
b                  # word boundary

演示

至少有两个下划线的文本字符串的正则表达式

^[^_]*_[^_]*_.*$
  • ^- 比赛开始
  • [^_]*然后零到任意数量的字符,这些字符不是下划线
  • _然后是下划线
  • [^_]*然后零到任意数量的字符,这些字符不是下划线
  • _然后是下划线
  • .*然后从零到任意数量的字符
  • $- 比赛结束

下面的正则表达式使用前瞻断言来简化事情:

b(?=(?:([A-Za-z0-9]*_){2}))[A-Za-z0-9_]+(?:/d{3,})?b
  1. b(?=(?:([A-Za-z0-9]*_){2}))匹配单词边界当且仅当后跟([A-Za-z0-9]*_){2},也就是说,一个字符串包含 0 个或多个合法字母数字字符,后跟一个"_",全部重复两次。这是一个前瞻断言,可确保下面步骤 2 中的匹配项至少包含两个下划线字符。
  2. [A-Za-z0-9_]+匹配合法字符一次或多次。
  3. (?:/d{3,})?可选的正斜杠,后跟 3 位或更多数字。
  4. b匹配单词边界。

查看演示

([^s]*_[^s]*){2,}将匹配包含至少两个下划线的任何单词(任何没有空格的字符串(,方法是找到任意数量的非空格的两个集合组,一个下划线,无论如何,许多"单词"符号即将出现。

您可以将[^s]*替换为您喜欢的"单词"的任何定义。

您还可以在第一个括号后添加?:以避免捕获组。

最新更新