我正在构建这个正则表达式,并且正面向前看。基本上它必须选择行中的所有文本,直到“:”之前的句号并添加“|”最后划定它。下面是一些示例文本。我在gskinner和editpadpro中对此进行了测试,显然它具有完整的grep正则表达式支持,所以如果我能得到答案,我会很感激。
下面的正则表达式在某种程度上起作用,但我不确定它是否正确。如果文本包含括号,它也会失效。
最后我想添加另一个忽略规则,例如忽略但包含“Co”的规则在选择中。第二个忽略规则将忽略但包括在它们之前具有单个大写字母的句点。以下示例文本。感谢您的帮助。
^(?:[^|]+\|){3}(.*?)[^(?:Co)]\.(?=[^:]*?\:)
121| Ryan, T.N. |2001. |I like regex. But does it like me (2) 2: 615-631.
122| O' Toole, H.Y. |2004. |(Note on the regex). Pages 90-91 In: Ryan, A. & Toole, B.L. (Editors) Guide to the regex functionality in php. Timmy, Tommy& Stewie, Quohog. * Produced for Family Guy in Quohog.
答案 0 :(得分:1)
我认为我不明白你想做什么。但是这部分[^(?:Co)]
绝对不正确。
使用方括号创建一个字符类,因为^
它是一个否定的类。这意味着在这个地方你不想匹配其中一个字符(?:Co)
,换句话说,它将匹配除“?”之外的任何其他字符。(:Co“。
<强>更新强>
我认为不可能。我该如何区分L.Co ..或类似的东西和句子的结尾?
但我在你的正则表达式中发现了另一个错误。最后一部分(?=[^:]*?\:)
应为(?=[^.]*?\:)
,如果您希望将:
之前的最后一个点与您在第一个点上匹配的表达式匹配。
答案 1 :(得分:0)
这个似乎做你想做的事。
(.*\.)(?=[^:]*?:)
它非常简单地匹配所有文本,直到冒号前的最后一个句号。