簡體   English   中英

使用帶有重復結束字的正則表達式提取字符串的一部分

[英]Extracting a section of a string using regex with repeating ending words

我試圖在python中使用re模塊提取一些原始字符串。 待提取部分的結束由重復的單詞識別(重復多次),當前的努力總是捕獲重復單詞的最后一個匹配。 我該如何修改此行為?

已從pdf中提取文本文件。 整個PDF存儲為一個字符串。 字符串的一般格式如下:

*“***開始注釋:字母數字字符和字符的集合EndofsectionTopic A:字符串Endofsection”*

要捕獲的預期字符串是: “字母數字單詞和字符的集合”

在這種情況下使用的嘗試解決方案是:“re.compile(r”* {3}開始注釋:(。+)\\ sEndofsection“)

這種嘗試傾向於匹配整個字符串,而不僅僅是“字母數字單詞和字符的集合”。

一種可能的方法是使用Endofsection進行拆分,然后僅從第一部分提取字符串 - 這可行,但我希望使用re.compile找到更優雅的解決方案。

正則表達式中的兩個問題,

  • 您需要轉義*因為它是元字符\\*
  • 其次,你正在使用(.+)這是一個貪婪的量詞,並會盡可能地嘗試匹配,但由於你想要最短的匹配,你需要將它改為(.+?)

修復這兩個問題,為您提供正確的預期匹配。

正則表達式演示

Python代碼,

import re

s = "***Start of notes: Collection of alphanumeric words and characters EndofsectionTopic A: string of words Endofsection"
m = re.search(r'\*{3}Start of notes:(.+?)\sEndofsection', s)
if m:
 print(m.group(1))

打印,

 Collection of alphanumeric words and characters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM