需要 Python Regex 多模式匹配和反模式匹配

pinvs909

我有一个 python 字符串,它具有以下数据模式。

(a) 由 XXX 根据情景 3.3(a) 进行选举。(b) 第二个陈述有 4.2(b) 节,它可能会选择情景 2.4(a)

我可能有需要由 (a) 到 (z) 拆分的上述模式字符串,但如果 (a) 到 (z) 出现在语句中间,特别是场景 XX(a) 到不应选择 XX(z)。

我需要将其拆分为(2 行)

  1. (a) 由 XXX 根据情景 3.3(a) 进行选举。

  2. (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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Regex模式匹配使用连字符引发错误

来自分类Dev

需要Python Regex帮助

来自分类Dev

python模式匹配和处理

来自分类Dev

Perl和Regex-单行模式匹配

来自分类Dev

日志文件中的Python多模式匹配

来自分类Dev

日志文件中的Python多模式匹配

来自分类Dev

Python Regex匹配和替换

来自分类Dev

python3 在模式匹配下划线并去掉不需要的东西

来自分类Dev

Python Regex Engine-“后视需要固定宽度模式”错误

来自分类Dev

Python Regex Engine-“后视需要固定宽度模式”错误

来自分类Dev

模式匹配中的Scala Regex

来自分类Dev

Java模式与RegEx不匹配

来自分类Dev

RegEx:如何重复模式匹配?

来自分类Dev

Java REGEX模式匹配2

来自分类Dev

PHP Regex:匹配“ url()”的模式

来自分类Dev

关于`NR==/regex/`匹配模式

来自分类Dev

python regex:行末反匹配

来自分类Dev

python返回字符串的匹配和不匹配模式

来自分类Dev

python返回字符串的匹配和不匹配模式

来自分类Dev

Python Regex 匹配所有出现的十进制模式,后跟另一个模式

来自分类Dev

为什么找不到python regex的所有模式匹配项?

来自分类Dev

模式具有相似文本时,如何使用RegEx获取Python中的所有匹配项?

来自分类Dev

Python regex:带有re.ASCII的模式仍然可以匹配unicode字符吗?

来自分类Dev

python regex或带有spacy模式匹配的单个字符

来自分类Dev

Python中的负RegEx模式匹配等效于Perl(!〜运算符)

来自分类Dev

Python Regex模式findall

来自分类Dev

无法使用perl和regex在阵列中保存模式匹配

来自分类Dev

perl regex-锚点和模式匹配

来自分类Dev

使用JAVA中的模式和匹配器的RegEx

Related 相关文章

热门标签

归档