我正在尝试为一个字符串编写正则表达式,该字符串应以"AET"
或"BUS"
开头,然后'_'
和一些字符串然后'_'
然后以任何字符串开头。
例如:
<AET/BUS>_<text>_....
我需要捕捉这种模式。
我试着把它写成:
.pattern = "(AET|BUS)_*_*"
但这不适合我。
请你帮我写一下这个模式的正则表达式。 例如:
<AET/BUS>_<text>_....
答案 0 :(得分:1)
尝试这种模式:
"^(AET|BUS)_.*_"
这将匹配任何以AET
或BUS
开头的字符串,后跟下划线,后跟零或更多任何字符,后跟下划线。
答案 1 :(得分:0)
当你说“然后用任何字符串休息”时,你的意思是什么?字符串什么时候停止?
^(AET|BUS)_.*?_
应执行非贪婪的搜索匹配,从AET_或BUS_到它找到的下一个_然后停止。如果你需要在第二个_之后捕获更多的字符,听起来就像你那样,你需要定义搜索应该以某种方式结束的时间,除非你想在之后抓住一切。
答案 2 :(得分:0)
这种用法是贪婪的第一场比赛
它与_
之间的另一个_
不匹配。它比非贪婪更快,但却是最小的匹配。
^(AET|BUS)_[^_]*_
答案 3 :(得分:0)
不是答案,但我需要格式化才能让@ mrres1看到光明:
>> set r = New RegExp
>> r.Pattern = "<(AET|BUS)>_{1}([^_]){1,}_{1}(.){1,}"
>> set ms = r.Execute("<BUS>_TESTTEST_!@#$%^&*()")
>> WScript.Echo ms(0).Submatches(0)
>> WScript.Echo ms(0).Submatches(1)
>> WScript.Echo ms(0).Submatches(2)
>>
BUS
T
)
>> r.Pattern = "<(AET|BUS)>_{1}([^_]{1,})_{1}(.{1,})"
>> set ms = r.Execute("<BUS>_TESTTEST_!@#$%^&*()")
>> WScript.Echo ms(0).Submatches(0)
>> WScript.Echo ms(0).Submatches(1)
>> WScript.Echo ms(0).Submatches(2)
>>
BUS
TESTTEST
!@#$%^&*()
答案 4 :(得分:-1)
<(AET|BUS)>_{1}([^_]){1,}_{1}(.){1,}
这将使三个捕获,“AET”或“BUS”为1,“&lt; text&gt;”为2,“.......”为3。
如果要捕获下划线,只需将它们移动到括号内。
例如,这些都符合模式:
<AET>_<text>_....
<BUS>_<text>_....
<AET>_test123_test
<BUS>_TESTTEST_!@#$%^&*()