我必須從PDF流中拉出一些文本作爲字符串。該流將包含用於描述文本外觀的標記以及文本本身。我收到的字符串,我的正則表達式將不得不運行將不會包含任何回車或換行符。我感興趣的文本的區域總是在括號內(並且可能會在括號內加括號),並且在最後的括號之後將會有字母'Tj'。總之,我是什麼之後將始終遵循約定:正則表達式,其中括號可能不平衡
(.....) Tj
目前,正則表達式我有工作,只要括號都是平衡:
\((?:[^()]|(?'paren'\()|(?'-paren'\)))+(?(paren)(?!))\)
但是,如果文本本身包含不平衡的parethesis,這個正則表達式不會拉我想要的,我不知道如何改變它來處理不平衡的括號。
這裏是什麼將被認爲是「正常」的字符串樣本:
q Q /Tx BMC q 0 0 471.34 407.34 re W n BT 1 0 0 1 2 397.16 Tm /Helv 12 Tf 0 g (RE: Request for Additional Information) Tj
所以,很顯然,我想要得到的字符串「RE:要求提供補充資料」出這一點。
,這裏是一個例子情況下,我的正則表達式將在失敗(我已經添加了不平衡括號):
q Q /Tx BMC q 0 0 471.34 407.34 re W n BT 1 0 0 1 2 397.16 Tm /Helv 12 Tf 0 g (RE: Request for (Additional Information) Tj 0 g 1 0 0 1 2 383.29 Tm 0 g ( 13. Processing TT Instructions -) Audit Note 12) Tj 0 g 1 0 0 1 2 369.42 Tm 0 g () Tj 0 g 1 0 0 1 2 355.55 Tm 0 g (Dear test:) Tj 0 g 1 0 0 1 2 341.68 Tm 0 g () Tj 0 g 1 0 0 1 2 327.8 Tm 0 g (Thank you for the more random words here. )Unfortunately, more words here) terminating (words here) Tj
還有空套括號在這裏,看起來像:
() Tj
這些表示PDF呈現時的回車和換行符。任何幫助表示讚賞。先謝謝你。
--- UPDATE來回答以下
問題的任何類型的用戶輸入可以被放置在打開和關閉括號之間。我想提取所有提供的內容,但可能是,即使用戶忘記平衡括號。唯一的保證是圓括號之間的文本是用戶輸入,但是他們輸入的文本取決於它們,所以它不遵循預定義的格式,如([abbrev]:[content])等。內容只能保證在一個開放的父親和一個親密的父親之間,並且在親密的父親之後將是字母'Tj'。
Regualr表達式不能處理任意嵌套的括號。匹配括號的語言本身是不規則的。 – CollinD
我還沒有想出你的正則表達式,但是,我已經玩過你的例子了,我認爲這是可行的,儘管你可能需要做一個以上的搜索和替換。在例子「(RE:請求(附加信息)」)中,可以提取「RE:請求(附加信息)」,通過替換行的開頭,後面跟任何數字的任何字符,而不是左括號,然後進行編號保存,關鍵在於:*得到最長的匹配,所以它將繞過第一個左括號(RE:...並一直走到(另外...我明天再看看這個 –
由在你的例子中,你的正則表達式會失敗,這裏有多個匹配,這些都是在一行還是每行? –