我正在尝试使用RegEx来查找字符串,但仅在它出现在另一个字符串之后且在下一次出现第三个字符串之前。
使用此文字:
one (random text) abc (random text) end two (random text) abc (random text) end three (random text) abc (random text) end
我想找到“abc”,只有它出现在“两个”之后和下一个“结束”之前。如果在“两个”之后有“结束”,中间没有“abc”,则根本不返回匹配。
以下表达式将从“两个”匹配到下一个“结束”,但我不知道在哪里放“abc”:
(?s)(?i)two(.*?)end
以下表达式不起作用,因为它在“two”之间找到“abc”,在“three”之后找到“end”:
(?s)(?i)two(.*?)abc(.*?)end
我在一个程序中使用它,使用RegEx来决定文件是否满足条件,所以我不确定它使用的语言。程序只需要知道条件是否存在,那么表达式实际返回的结果是不重要的 - 只是是否匹配。
任何帮助将不胜感激!
编辑澄清整个过程中有其他随机文本,并澄清所要求的行为。
答案 0 :(得分:0)
您可以尝试以下模式:
Sub loopThroughMNFiles()
Const MnLoopingFolder As String = "C:\Users\xxxxxx\Desktop\outlook-attachments\MN Reports\2-26-18\INSINQ\"
Dim colFiles As New Collection, f
Dim MnWbk As Workbook, MnFile As String, sheetName As String
'add the files to a collection
MnFile = Dir(MnLoopingFolder)
Do While MnFile <> ""
colFiles.Add MnFile
MnFile = Dir()
Loop
Application.ScreenUpdating = False
'loop over the filenames from the collection
For Each f In colFiles
INSINQ_Macro Workbooks.Open(Filename:=MnLoopingFolder & f)
Next
Application.ScreenUpdating = True
MsgBox "Task Finished"
End Sub
以下是对模式的解释:
two(?:(?!(?:two|abc|end)).)*abc(?:(?!(?:two|abc|end)).)*end
基本思想是使用否定前瞻来谨慎地推进模式规则。