捕获时限制正向超前

时间:2018-09-22 10:46:34

标签: python regex lookahead

我会像从流中那样间隔获取一些文本,

ICY Info: StreamTitle='Elvis Presley - Saved';StreamUrl='';

ICY Info: StreamTitle='Elvis Presley - Saved'

ICY Info: StreamTitle='Ivank'av T'ali - Yorua';StreamUrl='';

ICY Info: StreamTitle='Ivank'av T'ali - Yorua'

我希望获得

Elvis Presley - Saved
Elvis Presley - Saved
Ivank'av T'ali - Yorua
Ivank'av T'ali - Yorua

我正在使用(?<=\=\').*(?=';S)(?<=\=\').*(?='),但它们似乎不合适。

Demo

@Edit:我刚来了(?<=\=\').*?(?=';)

1 个答案:

答案 0 :(得分:1)

(?=';S)不存在时,

';S在第一个和第三个示例中将不起作用。

另一方面,(?=')在第一个和第三个示例中的匹配度太大。

您可以做的是在前瞻中使用交替显示来检查;:',然后检查字符串的结尾。

(?<==').+?(?='(?:;|$))

Regex demo

说明

  • (?<==')肯定在左边暗示='
  • .+?匹配任意字符一次或多次非贪婪
  • (?=积极前瞻,断言右边是
    • '(?:;|$)匹配',后跟交替匹配;或断言字符串$的结尾
  • )近距离正面预测