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

时间:2019-09-22 10:54:07

标签: regex

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

我一直想进行正则表达式匹配,但目前失败了。

我正在看(逐行)提取至少两个下划线的单词或带有至少两个下划线且正斜杠+至少三个数字的单词。

我已经熬到了

([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

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

5 个答案:

答案 0 :(得分:1)

使用这个:

\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

demo

答案 1 :(得分:1)

您可以使用

Dim winShell As Object
    Set CurW = ActiveWindow
    Set TempW = ActivePresentation.NewWindow
    ActivePresentation.SaveCopyAs ("222.pptx")
        TempW.Close
    Set winShell = CreateObject("WScript.Shell")
    Debug.Print (("C:\" & Chr(34) & "Program Files" & Chr(34) & "\7-Zip\7z.exe d -y C:\Users\IT\Documents\222.pptx " & Chr(34) & "customUI" & Chr(34)))
    Call winShell.run("cmd /k C:\" & Chr(34) & "Program Files" & Chr(34) & "\7-Zip\7z.exe d -y C:\Users\IT\Documents\222.pptx " & Chr(34) & "customUI" & Chr(34) & " && exit")`

部分

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

Regex demo

答案 2 :(得分:0)

正则表达式用于至少包含两个下划线的文本字符串

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

答案 3 :(得分:0)

([^\s]*_[^\s]*){2,}通过找到两个包含任意数量的非空格的连续词组,一个下划线以及再次出现许多“单词”符号来匹配包含至少两个下划线的任何单词(任何不包含空格的字符串) 。

您可以将[^\s]替换为任意喜欢的“单词”定义。

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

答案 4 :(得分:0)

下面的正则表达式使用超前断言简化问题:

\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匹配单词边界。

See demo