繁体   English   中英

python 正则表达式获取数字和数字之间的段落

[英]python regex get number and paragraph between number

我有一个如下所示的字符串。

10. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

11. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

12. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

13. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

我想要做的是将标题和内容分成块并将它们放在一个列表中。

result = [10. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2, 11. Title text\ntext1text2text1text2text1text2text1text2text1text2text1text2text1 text2text1 text2text1 text2text1 text2text1text2\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2, ........]

我已经尝试过了,但老实说,我不知道该怎么做。 帮助

la_text = []
num = 1
for a in range(3):
    sepa = re.findall(r"\d*(.*)\d*", text)[num]
    la_text.append(sepa)
    num += 1

print(la_text)

要分离标题和段落,您可以使用仅带有多行标志re.M的负前瞻

使用 re.findall 将返回一个包含 2 个捕获组值的元组列表

^(\d+\..*)((?:\n(?!\d+\.).*)*)

查看正则表达式演示

要将它们组合为一个匹配项:

^\d+\..*(?:\n(?!\d+\.).*)*

查看另一个正则表达式演示

import re

pattern = r"^\d+\..*(?:\n(?!\d+\.).*)*"

s = "...."

print(re.findall(pattern, s, re.M))

Output

[
'10. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n',
'11. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n',
'12. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n',
'13. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2'
]

如果s包含问题中的字符串,您可以执行以下操作:

import re

pat = re.compile(r"^(\d+\.\s+.*?)(?=\n^\d+\.|\Z)", flags=re.M | re.S)

print(pat.findall(s))

印刷:

[
    "10. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n",
    "11. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n",
    "12. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n",
    "13. Title text\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n",
]

如果您不需要将标题与段落分开,另一个想法是使用re.split

re.split(r"\n\s*(?=\d+\.)", test_str)

请参阅 regex101 上的此演示或 tio.run 上的Python 演示

  • \n\s*这会在换行符和任意数量的空格处拆分
  • (?=\d+\.)如果后跟一个或多个数字和句点

如果您需要以数字为键的字典:

import re
m = re.findall(r'^(\d+).(.*)((?:\n(?!\d+\.).*)*)',s , re.M )
 
{element[0]:[element[1], element[2]] for element in m }

Output:

{'10': [' Title text',
  '\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n'],
 '11': [' Title text',
  '\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n'],
 '12': [' Title text',
  '\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n'],
 '13': [' Title text',
  '\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n\n\ntext1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2\n']}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM