我有一个 python 字符串,它具有以下数据模式。
(a) 由 XXX 根据情景 3.3(a) 进行选举。(b) 第二个陈述有 4.2(b) 节,它可能会选择情景 2.4(a)
我可能有需要由 (a) 到 (z) 拆分的上述模式字符串,但如果 (a) 到 (z) 出现在语句中间,特别是场景 XX(a) 到不应选择 XX(z)。
我需要将其拆分为(2 行)
(a) 由 XXX 根据情景 3.3(a) 进行选举。
(b) 第二个陈述有 4.2(b) 节,它可能会选择情景 2.4(a)
我正在尝试使用 python re 进行模式匹配
import re patterns=["[^0-9] (a) ","[^0-9] (b) ","[^0-9] (c) ","[^0-9] (d )"]
textData="(a) 由 XXX 给出,用于每个场景 3.3(a) 的选举。(b) 第二个语句有一个 4.2(b) 节,它可能会选择场景 2.4(a)" regexPattern = '|'.join (map(re.escape, patterns)) splitList=re.split(regexPattern,textData) 打印(splitList)
这是我从执行中得到的输出
['(a) 由 XXX 根据情景 3.3(a) 为其选举提供。(b) 第二个陈述有 4.2(b) 节,它可能会选择情景 2.4(a) ']
'.' 前后的空格 在上一节中有所不同,并且在上一节 (a) 以新行开始之后,可以说 (b) 一个新节。
尽管您的要求有点模糊,但考虑到您的特定输入字符串,合理的尝试似乎是在任何以文字.
开头且后跟文字(letter)
模式的空格上进行拆分。
import re
s = "(a) be given by XXX for its election per scenario 3.3(a). (b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially"
print(re.split(r"(?<=\.) (?=\([a-z]\))", s))
输出:
['(a) be given by XXX for its election per scenario 3.3(a).',
'(b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially']
我会谨慎地在大型或复杂的输入上使用它,因为误报的可能性很高。
另一个想法:如果您保证提取字母表中的每个字母,确保每个字母最终都会按顺序显示,并且想要将任何乱序视为正常内容,您可以尝试构建一个庞大的正则表达式:
import re
from string import ascii_lowercase
s = "(a) be given by XXX for its election per scenario 3.3(a). (b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially. (c) blah blah (c) blah blah (d) asd ad(a) (b) (e) ee (b) (a) (d) (f) (f) fff f ff (g) (a) gggg (h) hhhh (b) (i) iii i i (i) i (j) jjj (k) k (l) ll (a) (b) (x) (m) mm (n) nn (o) oo) () () (p) ppp (A) (B) (Q) (q) qq (r) rr (s) ss (t) tt( u ) (u) uu (v) vvv (ww) (w) ww (x) xx (y) yy (z) zzz"
pattern = "".join([f"((?: |^)\({l}\) .+)" for l in ascii_lowercase])
for result in re.findall(pattern, s)[0]:
print(result.strip())
输出:
(a) be given by XXX for its election per scenario 3.3(a).
(b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially. (c) blah blah
(c) blah blah
(d) asd ad(a) (b)
(e) ee (b) (a) (d) (f)
(f) fff f ff
(g) (a) gggg
(h) hhhh (b) (i) iii i i
(i) i
(j) jjj
(k) k
(l) ll (a) (b) (x)
(m) mm
(n) nn
(o) oo) () ()
(p) ppp (A) (B) (Q)
(q) qq
(r) rr
(s) ss
(t) tt( u )
(u) uu
(v) vvv (ww)
(w) ww
(x) xx
(y) yy
(z) zzz
这仍然对输入做出了一些全面的假设,但可能值得一试;将其视为概念证明。
换行符是另一个需要考虑的问题,如果存在的话(以及许多其他事情)。长话短说,手工编写解析器可能比正则表达式更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句