【问题标题】:Regular Expression to split text based on different patterns (within a single expression)基于不同模式(在单个表达式中)拆分文本的正则表达式
【发布时间】:2022-11-23 12:08:53
【问题描述】:

我有一些模式可以检测问题并在此基础上进行拆分。我正在使用一些假设,例如:

  1. 每个模式都以\n开头
  2. 每个模式都以\s+结尾

    我如何定义模式是这样的:

    <NUM>.
    Q <NUM>.
    Q <NUM>
    <Q.NUM.>
    <NUM>
    Question <NUM>
    <Example>
    Problem <NUM>
    Problem:
    <Alphabet><Number>.
    <EXAMPLE>
    Example <NUM>
    

    Someone suggested the below regex: try the demo

    ((Q|Question|Problem:?|Example|EXAMPLE)\.? ?\d+\.? ?|(Question|Problem:?|Example|EXAMPLE) ?)
    

    但它捕获了中间的模式,这对我来说是有问题的,因为我也可以在字符串中间有 Q.Example. 2 而不是捕获 &lt;NUM&gt;.

    这个列表是基于优先级的,所以我能想到的是构建这么多表达式并基于优先级运行一个循环,例如:

    QUESTIONS = [
        re.compile("\n\d+\."),
        re.compile("\nQ.\s*\d+\."), 
        re.compile("\nExample.\s*\d+\.")
    ]
    

    但效率很低。我怎样才能将这些组合在一个表达式中?

【问题讨论】:

    标签: python regex regex-group python-re


    【解决方案1】:

    只做愚蠢的解决方案并不可耻:

    ^(d+.|Q d+.|Q d+|Q.d+.|d+|Question d+|Example( d+)?|Problem d+|Problem:|[A-Z]d.|EXAMPLE)s+

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 2021-10-25
      • 2014-05-02
      • 2013-08-01
      • 2022-01-17
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多