簡體   English   中英

正則表達式匹配一行中的所有模式

[英]Regex to match all patterns in a line

我正在嘗試通過一些日志文件來查找一行,例如:

'A-Topeka-Firesale\:\s\*132\*\d{2,5}\*[23]\d{9}\#'

並與該行匹配后,在文件中向后查找並找到前一行,如下所示:

2016-12-30 11:02:12 DEBUG[ispatcher-18269] ab.talk.this.api.Api - http://hostname:19991/trapeze?session_id=176764&manager_event=old&apostrophe=2341231231234&_operation=doc 3da48a90-0f4f-4eb3-a241-94a1f05b891b requesting:

並且我需要匹配"http://hostname:19991/trapeze?" "manager_event=old"requesting:對於第二行(通常在第一場比賽之后的3-5行之間)進行比賽。

到目前為止,我已經嘗試了以下方法:

for each, line in enumerate(f):
first_match = re.search(b'A-Topeka-Firesale\:\s\*132\*\d{2,5}\*[23]\d{9}\#', line)     
    if first_match:
for i in range(each, -1, -1)
    if re.match("|".join(['http://hostname:19991/trapeze', 'manager_event=old', 'requesting:']), str(f[i])):
        break

和這個:

for each, line in enumerate(f):
    first_match = re.search(b'A-Topeka-Firesale\:\s\*132\*\d{2,5}\*[23]\d{9}\#', line)     
        if first_match:
            for i in range(each, -1, -1)
                if all(re.match(regex_str, str(f[i])) for regex_str in ['http://hostname:19991/trapeze', 'manager_event=old', 'requesting: ']):
                break

並且該呼叫匹配錯誤的行(例如,以空格開頭並以匹配項之一的實例(梯形)的行)。 請問我在做什么錯,我該怎么做呢?

輸入樣例:

 2016-01-30 00:00:27 DEBUG[-dispatcher-411] ab.talk.this.api.Api - http://hostname:19991/trapeze?manager_id=40178&manager_event=old&apostrophe=2341231231234&_operation=doc dgfgdffb-8123-4f05-ac15-7ac841afad14 requesting:
  HEADERS:
  this-is-a-header: 200*01231231234
  A-Topeka-Firesale: *132*200*01231231234#
  Host: hostname:19991
  Accept: */*
  User-Agent: AHC/2.0
  Timeout-Access: <function1>
 CONTENT:

2015-03-12 00:00:28 DEBUG[-dispatcher-747] ab.talk.this.api.Api - http://hostname:19991/trapeze?manager_id=84942&manager_event=old&apostrophe=2341231231235&_operation=ogle abcdf8237-393f-4c4b-bc46-e184cbf08d9a requesting:
  HEADERS:
  this-is-a-header: 100
  A-Topeka-Firesale: *132*100#
  Host: hostname:19991
  Accept: */*
  User-Agent: AHC/2.0
  Timeout-Access: <function1>
 CONTENT:

尚不清楚您真正想要什么,但是經過一番猜測-這可能就是您想要的嗎?

2016-12-30 11:02:12 DEBUG [ispatcher-18269] ab.talk.this.api.Api- http://主機名:19991 / trapeze?session_id = 176764&manager_event = old'trotrophe = 2341231231234&_operation = doc 3da48a90-0f4f-4eb3 -a241-94a1f05b891b請求:

bla bla bla

bla bla bla

bla bla bla

A-Topeka-Firesale:* 132 * 12345 * 2123456789#

在上面的文本中,您要匹配最后一行。 (您只提供了一個正則表達式,所以我將其與條件進行了匹配。)找到該行將使您進入第一行,匹配http://hostname:19991/trapeze? manager_event=old並發出requesting:按該順序,但不能緊接彼此。

如果我猜對了,這個正則表達式

(http://hostname:19991/trapeze.*?manager_event=old.*?requesting:).*?A-Topeka-Firesale\:\s\*132\*\d{2,5}\*[23]\d{9}\#

應該(可以)為你做。 它捕獲了第一行(完整),這就是我所了解的。 (您尚未指定它是否很特殊,例如session_id或其他名稱,但是當然可以直接“定位”。)

在regex101處檢查

請注意,e x ample使用擴展標志來允許將正則表達式拆分為(某種程度上)提高可讀性,並使用s ingle行標志具有. 匹配換行符。

暫無
暫無

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

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