我有一些模式,可以检测问题和分歧。我使用了一些假设,比如:
1.每个模式都以\n
开头
1.每个模式都以\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
,但没有捕获<NUM>.
这个列表是基于优先级的,所以我能想到的是构建这些表达式,并基于优先级运行一个循环,例如:
QUESTIONS = [
re.compile("\n\d+\."),
re.compile("\nQ.\s*\d+\."),
re.compile("\nExample.\s*\d+\.")
]
但是效率很低,我怎么能把这些都用在一个表达式中呢?
以下是测试字符串:
'TEStlabZ\nEDULABZ\nINTERNATIONAL\nLOGARITHMS AND INDICES\n\nQ.1. (A) Convert each of the following to logarithmic form.\n(i) \\( 5^{2}=25 \\)\n(ii) \\( 3^{-3}=\\frac{1}{27} \\)\n(iii) \\( (64)^{\\frac{1}{3}}=4 \\)\n(iv) \\( 6^{0}=1 \\)\n(v) \\( 10^{-2}=0.01 \\) (vi) \\( 4^{-1}=\\frac{1}{4} \\)\nAns. We know that \\( a^{b}=x \\Rightarrow b=\\log _{a} x \\)\n(i) \\( 5^{2}=25 \\quad \\therefore \\log _{5} 25=2 \\)\n(ii) \\( 3^{-3}=\\frac{1}{27} \\therefore \\log _{3}\\left(\\frac{1}{27}\\right)=-3 \\)\n(iii) \\( (64)^{\\frac{1}{3}}=4 \\therefore \\log _{64} 4=\\frac{1}{3} \\)\n(iv) \\( 6^{0}=1 \\quad \\therefore \\log _{6} 1=0 \\)\n(v) \\( 10^{-2}=0.01 \\therefore \\log _{10}(0.01)=-2 \\)\n(vi) \\( 4^{-1}=\\frac{1}{4} \\therefore \\log _{4}\\left(\\frac{1}{4}\\right)=-1 \\)\nQ.1. (B) Convert each of the following to exponential form.\n(i) \\( \\log _{3} 81=4 \\)\n(ii) \\( \\log _{8} 4=\\frac{2}{3} \\)\n(iii) \\( \\log _{2} \\frac{1}{8}=-3 \\)\n(iv) \\( \\log _{10}(0.01)=-2 \\)\n(v) \\( \\log _{5}\\left(\\frac{1}{5}\\right)=-1 \\) (vi) \\( \\log _{a} 1=0 \\)\nAns.\n(i) \\( \\log _{3} 81=4 \\quad \\therefore 3^{4}=81 \\)\n(ii) \\( \\log _{8} 4=\\frac{2}{3} \\quad \\therefore 8^{\\frac{2}{3}}=4 \\)\n(iii) \\( \\log _{2} \\frac{1}{8}=-3 \\quad \\therefore \\quad 2^{-3}=\\frac{1}{8} \\)\n(iv) \\( \\log _{10}(0.01)=-2 \\quad \\therefore \\quad 10^{-2}=0.01 \\)\n(v) \\( \\log _{5}\\left(\\frac{1}{5}\\right)=-1 \\quad \\therefore \\quad 5^{-1}=\\frac{1}{5} \\)\n(vi) \\( \\log _{a} 1=0 \\)\n\\( \\therefore a^{0}=1 \\)\nMath Class IX\n1\nQuestion Bank'
2条答案
按热度按时间t9aqgxwy1#
无羞于刚做哑巴解:
^(\d+\.|Q \d+\.|Q \d+|Q\.\d+\.|\d+|Question \d+|Example( \d+)?|Problem \d+|Problem:|[A-Z]\d\.|EXAMPLE)\s+
yk9xbfzb2#
您可以使用
请参阅regex demo。
(?m)^
-行的开始(m
允许^
匹配任何行开始位置)(?!$)
-同一位置不允许行结束(即不允许空行匹配)(?:((?i:Question|Problem:?|Example)|[A-Z])[. ]?)?
-可选序列((?i:Question|Problem:?|Example)|[A-Z])
-组1:不区分大小写的Question
、Problem
、Problem:
或Example
,或者大写字母[. ]?
-一个空格或.
(\d+[. ]?)?
-ID为2的可选捕获组,匹配一个或多个数字,然后是可选的.
或空格(?=\s)
-正lookahead,需要在当前位置的右侧立即添加一个空白字符。