我有以下字串:
text='2-05-13 15:31:48.253 StockSpy Realtime Stocks Quote[5353:207339] Websocket: symbols: ({change = "0.5250015";changePercent = "1.49701"; dayVolume = 16608364; exchange = NYQ; id = BAC; marketHours = 1; price = "35.595"; priceHint = 4;quoteType = 8; time = 3304904610000})2022-05-13 15:31:48.256 StockSpy Realtime Stocks Quote[5353:207339] Websocket: Streamer Prices Updat2022-05-13 15:31:48.256 StockSpy Realtime Stocks Quote[5353:207343] refreshG2022-05-13 15:31:48.267 StockSpy Realtime Stocks Quote[5353:207339] webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message: CgReREpJFRSv 0YY8MCp3ZdgKgNESkkwCTgBRb2 wz9ItLvjWGWAnvJD2A2022-05-13 15:31:48.267 StockSpy Realtime Stocks Quote[5353:207339] Websocket: symbols: ( { change = "485.2383"; changePercent = "1.529258"; dayVolume = 186178996; exchange = DJI; id = "^DJI"; marketHours = 1; price = "32215.54"; priceHint = 4; quoteType = 9; time = 3304904614000})'
我只想提取以下文本:
symbols: ( { change = "485.2383"; changePercent = "1.529258"; dayVolume = 186178996; exchange = DJI; id = "^DJI"; marketHours = 1; price = "32215.54"; priceHint = 4; quoteType = 9; time = 3304904614000})
以及該特定格式的所有文本,因為這在我的資料集中多次出現。
因此,我需要一個正則運算式模式,可以提取括號內的所有資料,包括括號和單詞symbols。所以搜索所有單詞symbols并在最后一個右括號結束并抓取所有這些單詞的東西。
我已經使用 regex101 構建了一個模式,我最接近的是這個模式 ,方法是使用以下內容:
^[^\()] (^.)\s
我的文本結構就像在 regex101 中一樣,但是,當它只是上面給出的單個字串時,我使用了:
\(.*?\)
但是它仍然會抓取不必要的文本。
uj5u.com熱心網友回復:
您可以使模式更具體一點:
\bsymbols:\s*\({change\s*=[^{}]*}\)
解釋
\bsymbols:\s*匹配單詞symbols,然后:和可選的空白字符\({匹配({change\s*=匹配change,可選的空白字符和=[^{}]*匹配除{and以外的可選字符}}\)匹配})
查看regex101 演示
或者僅指定使模式不那么嚴格的符號:
\bsymbols:\s*\({[^{}]*}\)
正則運算式演示
uj5u.com熱心網友回復:
你可以用這個正則運算式來做到這一點:
symbols: *\( *{[^}] } *\)
解釋:
symbols::“符號”字后跟冒號*: 任意數量的空格\(: 開括號*: 任意數量的空格{: 打開花括號[^}]: 除花括號外的任何字符}: 閉合花括號*: 任意數量的空格): 右括號
在這里試試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475188.html
標籤:正则表达式
下一篇:failregex錯過條目
