簡體   English   中英

正則表達式配置

[英]Regular expression configuration

我有一個包含如下示例數據的文本文件,我使用正則表達式從文本文件中提取數據。

 Card number: 99280*********8823, SEQ: 182
Current session ID: 182
21/01/2021 08:46:49 : Selected language : French
21/01/2021 08:46:49 : Chip application : NO Active 
 21/01/2021 09:53:03 : Returned code : 0
 21/01/2021 09:53:03 : Pin entered
 21/01/2021 09:53:09 : Transaction selected: FastCash 40000 on ATM: Y6154514
 21/01/2021 09:53:10 : Returned code : 0
21/01/2021 09:53:13  : FastCash Authorization requested
21/01/2021 09:53:14  : FastCash Authorized
Returned code : 0, STAN: 680017
21/01/2021 09:53:27  : Cash dispensed
21/01/2021 09:53:28  : Card ejected
21/01/2021 09:53:29  : Card taken
21/01/2021 09:53:32  : Dispense details:
->cass 1: 0 x 5000 MMM, cass 2: 4 x 10000 MMM
->cass 3: 0 x 10000 MMM, cass 4: 0 x 20000 MMM
------->Total cash dispensed: 40000 MMM
21/01/2021 09:53:32  : Cash presented
21/01/2021 09:53:32  : Waiting for cash to be taken
21/01/2021 09:53:33  : Cash taken
21/01/2021 09:53:39  : Transaction completed
 21/01/2021 09:53:41 : Session terminated

這是使用的正則表達式:

regex = r"number:\s(\d+\*+\d+).*?ID:\s*(\d*).*?ATM:\s(\w+).*?STAN:\s(\d+).*?Total cash dispensed:\s*([a-zA-Z0-9]+)\s+([a-zA-Z0-9]+).*?completed[\r\n]+(.*?)\s:"

output 是:

[('99280*********8823', '182', 'Y6154514', '680017', '40000', 'MMM', ' 21/01/2021 09:53:41')]

我的問題是:有沒有一種方法可以從配置文件或 env 文件中配置正則表達式,其中需要的字段被選中,例如僅獲取元組列表中的第一個元素或第一個和第二個或第一和最后....

據我了解,正則表達式只是字符串(加上減去一些細節),因此可以使用通常與字符串相關的東西來創建和操作它們。

因此,您可以將您的正則表達式字符串拆分為每個元素的一個字符串,然后將所有字符串添加在一起,每個字符串使用 boolean 說明是否應該包含它。 然后可以輕松地存儲 boolean 變量並從任何類型的文件中讀取。

考慮以下從中讀取數據的“文件”:

clouds:1
sun:2
dirt:3
pixel:4

現在創建您的正則表達式,如下所示:

rclouds = r"clouds:(\d).*?"
rsun = r"sun:(\d).*?"
rdirt = r"dirt:(\d).*?"
rpixel = r"pixel:(\d).*?"
bclouds = 0
bsun = 1
bdirt = 1
bpixel = 0
regex = rclouds*bclouds + rsun*bsun + rdirt*bdirt + rpixel*bpixel

re.findall(regex,<however_you_access_the_above_"file">)將返回“sun”和“dirt”的值,因為 bsun 和 bdirt 為真,bclouds 和 bpixel 為假。

現在您只需制作一個用戶可以為每個元素指定 0 或 1 的文件,然后您從該文件中讀取 bclouds,...,bpixel 而不是在代碼中指定它們。

暫無
暫無

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

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