gpt4 book ai didi

python - 否定先前匹配的词组

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:09 25 4
gpt4 key购买 nike

我正在尝试从如下所示的字符串中提取内容:

A.content content 
content
B.content C. content content
content D.content

这是我的 Python 正则表达式模式:

reg = re.compile(r''' 
(?xi)
(\w\.\t*\s*)+ (?# e.g. A. or b.)
(.+) (?# the alphanumeric content with common symbols)
^(?:\1) (?# e.g. 'not A.' or 'not b.')
''')

m = reg.findall(s)

让我举个例子。假设我有以下字符串:

s = '''
a. $1000 abcde!?
b. (December 31, 1993.)
c. 8/1/2013
d. $690 * 10% = 69 Blah blah
'''

以下正则表达式有效并向我返回正则表达式组的内容:

reg = re.compile(r'''
(?xi)
\w\.\t*
([^\n]+) (?# anything not newline char)
''')

for c in reg.findall(s): print "line:", c
>>>line: $1000 abcde!?
>>>line: (December 31, 1993.)
>>>line: 8/1/2013
>>>line: $690 * 10% = 69 Blah blah

但是如果内容渗透到另一行,则正则表达式不起作用

s = '''
a. $1000 abcde!? B. December
31, 1993 c. 8/1/2013 D. $690 * 10% =
69 Blah blah
'''
reg = re.compile(r'''
(?xi)
(\w\.\t*\s*)+ (?# e.g. A. or b.)
(.+) (?# the alphanumeric content with common symbols)
^(?:\1) (?# e.g. 'not A.' or 'not b.')
''')
for c in reg.findall(s): print "line:", c # no matches :(
>>> blank :(

无论是否有换行符分隔内容,我都希望获得相同的匹配项。

这就是我尝试使用否定匹配词组的原因。那么关于如何使用正则表达式或其他解决方法解决这个问题有什么想法吗?

谢谢。

保罗

最佳答案

认为我明白你想要什么。你想 split

a.   $1000 abcde!? B.     December 
31, 1993 c. 8/1/2013 D. $690 * 10% =
69 Blah blah

进入

  • a。 $1000 abcde!?
  • B. 1993 年 12 月\n31
  • c. 2013年8月1日
  • D. $690 * 10% =\n69 等等

对吗?那么负前瞻断言就是您想要的:

reg = re.compile(r''' 
(?xs) # no need for i, but for s (dot matches newlines)
(\b\w\.\s*) # e.g. A. or b. (word boundary to restrict to 1 letter)
((?:(?!\b\w\.).)+) # everything until the next A. or b.
''')

findall()一起使用:

>>> reg.findall(s)
[('a. ', '$1000 abcde!? '), ('B. ', 'December \n 31, 1993 '),
('c. ', '8/1/2013 '), ('D. ', '$690 * 10% = \n 69 Blah blah\n')]

如果您不需要 a. 部分,请使用

reg = re.compile(r''' 
(?xs) # no need for i, but for s (dot matches newlines)
(?:\b\w\.\s*) # e.g. A. or b. (word boundary to restrict to 1 letter)
((?:(?!\b\w\.).)+) # everything until the next A. or b.
''')

关于python - 否定先前匹配的词组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com