使用正则表达式从文本中提取嵌入字符串的句子

Extracting the sentence where a string is embedded from a text using Regex

我想从作为字符串变量提供的文本中提取句子,其中嵌入了属于子字符串列表的子字符串。如果我不能提取句子,我会妥协地提取感兴趣的子字符串前后的一段固定长度的字符串。

也许下图会让事情更清楚:

在此图像中,我们看到分配给字符串变量的文本。以黄色突出显示的子字符串是感兴趣的子字符串,在给定文本中出现了 3 次。我想要一个 return 两个突出显示的句子(绿色 + 黄色)的函数。如果我不能提取句子,我会在黄色突出显示的字符串前后提取固定数量的单词(例如 20 个单词)。

该子串将列在感兴趣的子串列表中。

我找到了一种方法来提取确切的子字符串,而不是提取它前后的一段文本,如上所述。

例如,

text = 'Την 25/07/2019 καταχωρίσθηκε στο Γενικό Εµπορικό Μητρώο (Γ.Ε.ΜΗ.) µε Κωδικό Αριθµό Καταχώρισης 1801727 η µε αριθµό 78002/ 25-07-2019 απόφασή µας (Α∆Α:  ΩΙΑ7465ΧΙ8-ΤΨΦ), µε την οποία εγκρίθηκε  η  τροποποίηση εν συνόλω του καταστατικού της ανώνυµης εταιρείας µε την επωνυµία  «ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ» και αριθµό Γ.Ε.ΜΗ 14492035000 (πρώην Αρ.ΜΑΕ 17520/06/B/88/18) σύµφωνα µε την  από 29.5.2019 απόφαση της Τακτικής Γενικής Συνέλευσης των µετόχων της, στο πλαίσιο εναρµόνισης µε το ν. 4548/2018 «Αναµόρφωση ∆ικαίου Ανωνύµων Εταιρειών», όπως ισχύει. Το εν λόγω καταστατικό µε ηµεροµηνία 29/5/2019 αποτελείται από 33 άρθρα, ως αυτά διαλαµβάνονται στα κεφάλαια Ι έως ΙΧ αυτού.Ο ΠΡΟΪΣΤΑΜΕΝΟΣ ΤΗΣ ∆ΙEΥΘΥΝΣΗΣ                                                                                                     ΙΩΑΝΝΗΣ ΑΡΕΤΑΙΟΣ      1 ΝΕΟ ΚΕΙΜΕΝΟ ΤΟΥ ΚΑΤΑΣΤΑΤΙΚΟΥ ΤΗΣ ΑΝΩΝΥΜΗΣ ΕΤΑΙΡΙΑΣ «ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ» με αριθμό ΜΑΕ: 17520/06/Β/88/18 και αριθμό ΓΕΜΗ: 14492035000 όπως προέκυψε ύστερα από την εναρμόνιση με τις διατάξεις των άρθρων του Ν. 4548/2018 με απόφαση της από 29.05.2019 Γενικής Συνέλευσης των μετόχων της  «ΚΕΦΑΛΑΙΟ I ΣΥΣΤΑΣΗ - ΕΠΩΝΥΜΙΑ - ΣΚΟΠΟΣ - ΕΔΡΑ - ΔΙΑΡΚΕΙΑ  Άρθρο 1 Σύσταση - Επωνυμία Συνίσταται Ανώνυμος Εταιρία με την επωνυμία “ΑΛΟYΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟYΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ‘’ και διακριτικό τίτλο ‘’ΑΛΟΥΜΥΛ Α.Ε.’’. Σε περίπτωση συναλλαγής της Εταιρίας με πρόσωπα της αλλοδαπής, θα χρησιμοποιείται η αγγλόφωνη εκφορά της εταιρικής επωνυμίας, ήτοι ‘’ΑLUMΙL ΑLUΜΙNΙUΜ INDUSTRY SA”.»  Άρθρο 2 Σκοπός «Σκοπός της Εταιρίας είναι η ανέγερση και εκμετάλλευση εργοστασίου παραγωγής επιμήκων προϊόντων αλουμινίου με τη μέθοδο διελάσεως και επιφανειακής επεξεργασίας αυτών. Η έρευνα, ο σχεδιασμός, η μελέτη και η εμπορία εξοπλισμού για παραγωγή ηλεκτρικής ενέργειας από ανανεώσιμες πηγές ενέργειας και ειδικότερα αλλά όχι περιοριστικά από ηλιακή ενέργεια. Η εμπορία των προϊόντων αυτών, καθώς και η εμπορία παρεμφερών προϊόντων'

import regex
list_of_strings =['ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ', 
                  'ΑΝΕΚ ΤΟΥΡΙΣΤΙΚΗ - ΞΕΝΟΔΟΧΕΙΑΚΗ - ΣΥΜΜΕΤΟΧΩΝ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ', 
 'ATTICA BANK ΑΝΩΝΥΜΗ ΤΡΑΠΕΖΙΚΗ ΕΤΑΙΡΕΙΑ']
regex.findall(r"\L<words>", text, words= list_of_strings)
['ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ']

你会提出什么建议?

这听起来像是正则表达式拆分的工作。

from re import split

split('abc\d{3}','sldkfjsdl abc678 sldkfjsdlk thing')

编辑:

写了一个通用的拆分器。

from re import split

def super_split(regex_list,string): 
    answer = [string] 
    for r in regex_list: 
        answer = sum([sum([[s,r] for s in split(r,a)],[])[:-1] for a in answer],[]) 
    return answer 

s = super_split(list_of_strings,text)

注意到您提供的文字不是图片中给出的全文,所以我只能根据您提供的内容进行测试。