Python正则表达式:如何找到具有相同开始的重叠匹配

时间:2016-07-06 15:11:48

标签: python regex regex-lookarounds

我的目标是找到给定正则表达式的多个匹配项。匹配可能重叠(在SO上讨论得很好),它们可能从字符串的相同位置开始(似乎没有在SO中解决)。这是一个例子:

qabc: (?=((\S*(?P<a>-A-)\S* )(\S*(?P<b>-B-)\S* )?(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'b': ['-B-'], 'c': []}
{'a': ['-A-'], 'b': [], 'c': ['-C-']}

qac : (?=((\S*(?P<a>-A-)\S* )(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'c': ['-C-']}

我期待这个输出:

qabc: (?=((\S*(?P<a>-A-)\S* )(\S*(?P<b>-B-)\S* )?(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'b': ['-B-'], 'c': []}

qac : (?=((\S*(?P<a>-A-)\S* )(\S*(?P<c>-C-)\S* )?)).*
{'a': ['-A-'], 'c': ['-C-']}

相反,我得到了这个输出:

(?=...)

从我的测试代码中可以看出,我从其他SO帖子中收集了两个学习内容,包括this one

  1. 使用支持重叠匹配的new Python regex module
  2. 使用前瞻断言public class MainActivity extends AppCompatActivity implements hold_undo_fragment.toggleButtonListener { public void runBeaconDistances(){ final Intent i = new Intent(this, corsi.class); final Intent j = new Intent(this, search_key.class); final Intent k = new Intent(this, corsi2.class); beaconDistances = new BeaconDistances(this, beaconIDs); beaconDistances.setListener(new BeaconDistances.Listener() { @Override public void onBeaconDistancesChanged(BeaconID beaconID) { if(beaconID != null){ int beaconMinor = beaconID.getMinor(); switch (beaconMinor) { case 9911: startActivity(i); break; case 11904: startActivity(j); break; case 27710: startActivity(k); break; } } } }); } } 匹配子字符串而不消耗它。
  3. 任何帮助都将不胜感激。

0 个答案:

没有答案