我需要提取与传递给python函数的标题级别1字符串相匹配的文本(标题及其段落)。 下面是我工作的mardown文本示例:
# My first header
## Nec sic igni ad ad aventi
Lorem markdownum quantumque nunc, fine superi sagittis, haut regalis attollo,
ora inferius, mensor deam? Sedili quoque tauri. Quo limite ducem.
1. Arva fecit partes tosta
2. Insignia est ausae ut ut ait
3. O summa saepe
Sic ipsos, Phlegethontide nisi poterat neque quos tum partes rapitur. Filius
utraque: glande, ut exiles terram fiducia coeunt. Et caelo legit multis,
plangorem altoque; et iamque nec. Sanguine corpora prora quicquid insolida in
Parin: stupet est posses nos mater temptat, gemit num.
# My second header
## Primordia metuam his dixerat talaria cognoscenda
Lorem markdownum revulsum dilexit contra. Qui seu supplex Themis profuit quoque
Hyperionis, omnibus aesculus signa medendi. Aspiciunt rigidique finibus ducunt
postquam, huic postera lignum, properent.
- Nostro purgamina capitque longis
- Virtus suo moenibus
- Byblida longum pudibunda referre
- Via in ab vulneribus petita mirantur quamquam
- Et vela
- Nondum sacer meminisse Dircen novas dumque
例如,我需要从上面的文本中提取标题“我的第二个标题”的所有文本
我正在尝试使用正则表达式,但没有找到解决问题的正确规则
def findHeader("My second header")
r = re.compile(r"the regular expression")
print(r.findall(text))
findHeader输出:
# My second header
## Primordia metuam his dixerat talaria cognoscenda
Lorem markdownum revulsum dilexit contra. Qui seu supplex Themis profuit quoque
Hyperionis, omnibus aesculus signa medendi. Aspiciunt rigidique finibus ducunt
postquam, huic postera lignum, properent.
- Nostro purgamina capitque longis
- Virtus suo moenibus
- Byblida longum pudibunda referre
- Via in ab vulneribus petita mirantur quamquam
- Et vela
- Nondum sacer meminisse Dircen novas dumque
这就是工作:
输出:
说明:
如果我理解正确,您试图在每行的开头只捕获一个#符号
帮助您解决此问题的正则表达式是:
r"(?:^|\s)(?:[#]\ )(.*\n+##\ ([^#]*\n)+)"
。括号用于分隔捕获组或非捕获组。第一个组(?:^|\s)
是一个非捕获组,因为它以问号开头。在这里,您希望匹配的字符串以一行或空白开头,然后在第二个组([#]\ )
,[#]
将恰好匹配一个字符\
匹配哈希和h1标记文本内容之间的空格。最后,您希望匹配任何可能的字符,直到行尾,因此使用特殊字符.
,它标识任何字符,后跟将匹配先前匹配字符的任何重复的+
这可能就是您要查找的代码片段,我使用您使用的相同示例测试对其进行了测试
如果您只想提取段落文本,那么可以使用与前一个类似的正则表达式:
r"(?:^|\s)(?:[#]\ )(.+)"
,但它只是从捕获组中删除#符号相关问题 更多 >
编程相关推荐