鉴于:
ABC
content 1
123
content 2
ABC
content 3
XYZ
Run Code Online (Sandbox Code Playgroud)
是否有可能创建一个匹配最短版本的"ABC [\ W\W] +?XYZ"的正则表达式
基本上,我正在寻找"ABC后跟任何以XYZ终止的字符,但如果我遇到ABC则不匹配"(但是将ABC视为潜在的正则表达式本身,因为它不会总是设定长度. ..所以ABC或ABcC也可以匹配)
因此,更一般地说:REGEX1后跟任何字符并由REGEX2终止,如果REGEX1出现在中间则不匹配.
在这个例子中,我不想要前4行.
(我确信这个解释可能需要......进一步解释哈哈)
编辑:
好的,我现在需要进一步解释!感谢到目前为止的建议.在我开始研究如何将每个提议的解决方案应用于我的问题时,我至少会给你更多的思考.
建议1:反转字符串内容和正则表达式.
这当然是一个非常有趣的黑客,根据我解释的问题解决问题.在简化问题时,我没有提到相同的事情可能会反过来发生,因为结尾签名也可能在以后存在(并且已经证明在我的特定情况下).这引入了下面说明的问题:
ABC
content 1
123
content 2
ABC
content 3
XYZ
content 4
MNO
content 5
XYZ
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我会检查像"ABC到XYZ"这样的东西,意思是抓住[ABC,内容1,XYZ] ......但是偶然捕捉[ABC,内容1,123,内容2,ABC,内容3,XYZ] .反转将捕获[ABC,内容3,XYZ,内容4,MNO,内容5,XYZ]而不是我们想要的[ABC,内容2,XYZ].关键是尽量使其尽可能通用,因为我也将搜索可能具有相同起始签名的东西(在这种情况下为正则表达式"ABC"),以及不同的结束签名.
如果有一种方法来构建正则表达式以便它们封装了这种限制,那么只要在构建正则表达式以在此类型的字符串中搜索时,就可以更容易地引用它,而不是创建自定义搜索算法.处理它.
建议2:带有IGNORECASE标志的A + B + C + [^ A] + [^ B] + [^ C] + XYZ
在ABC是有限的情况下,这似乎很好.尽管如此,将它视为正则表达式.例如:
Hello!GoodBye!Hello.Later.
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的非常简化的版本.我想要"Hello.Later".给出启动正则表达式Hello [!.]和结束稍后[!.].运行一些像Hello [!.]稍后[!.]的东西会抓取整个字符串,但是我想说如果在找到的第一个起始正则表达式实例和第一个结束正则表达式之间存在启动正则表达式Hello [!.]找到实例,忽略它.
这个提议下面的convo表明我可能会受到与括号匹配问题类似的常规语言限制的限制(Google it,考虑起来很有趣).这篇文章的目的是看看我是否确实不得不求助于创建一个处理我遇到的问题的基础算法.如果可能的话,我非常希望避免使用它(在上面给出的简单示例中,为...设计有限状态机非常容易.我希望保持这种状态稍微复杂一点).
建议3: ABC(?:(?!ABC).)*?XYZ与DOTALL标志
如果它实际上允许ABC成为正则表达式,我喜欢这个想法.我明天进入办公室的时候就要探索这个.乍一看,没有什么看起来太平凡了,但我对python正则表达式来说是全新的(并且在代码中实际应用正则表达式而不仅仅是理论上的功课)