我正在尝试解析一个文本文件,其中包含带下划线的一些单词。
我一直想进行正则表达式匹配,但目前失败了。
我正在看(逐行)提取至少两个下划线的单词或带有至少两个下划线且正斜杠+至少三个数字的单词。
我已经熬到了
([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
如果有人可以在这里帮忙,我将不胜感激。
答案 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
答案 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个以上的数字/
字边界答案 2 :(得分:0)
正则表达式用于至少包含两个下划线的文本字符串
^[^_]*_[^_]*_.*$
^
-比赛开始[^_]*
然后从零到任意数量的非下划线字符_
然后是下划线[^_]*
然后从零到任意数量的非下划线字符_
然后是下划线.*
然后从零到任意数量的字符$
-比赛结束答案 3 :(得分:0)
([^\s]*_[^\s]*){2,}
通过找到两个包含任意数量的非空格的连续词组,一个下划线以及再次出现许多“单词”符号来匹配包含至少两个下划线的任何单词(任何不包含空格的字符串) 。
您可以将[^\s]
替换为任意喜欢的“单词”定义。
您也可以在第一个括号后添加?:
,以避免捕获组。
答案 4 :(得分:0)
下面的正则表达式使用超前断言简化问题:
\b(?=(?:([A-Za-z0-9]*_){2}))[A-Za-z0-9_]+(?:\/\d{3,})?\b
\b(?=(?:([A-Za-z0-9]*_){2}))
当且仅当其后跟([A-Za-z0-9]*_){2}
(即包含0个或多个合法字母数字字符且后跟'_)的字符串时,才匹配单词边界重复两次。这是前瞻性断言,可确保我们在下面的步骤2中的匹配至少包含两个下划线字符。[A-Za-z0-9_]+
匹配合法字符一次或多次。(?:\/\d{3,})?
可选的正斜杠,后跟3个或更多数字。\b
匹配单词边界。