2017-06-09 82 views
1

我有一個標題:的Html正則表達式除去一年格式標題

[b]Author Name - Book Title (2004) (PDF)[/b] 

我想刪除(2004年),並在這個標題(PDF),我可以用書名這個正則表達式分離作者姓名和:

\[b\](.+?) - (.+?)\[/b\] 

但是,我不知道如何去除年份及其格式。

我真的很感謝任何幫助。

+0

您應該刪除HTML標記,因爲這實際上與問題無關。 – Tezra

+0

替換模式['\(。* \)'](https://regex101.com/r/MEfAv3/1)用''''替代您的語言。 (在PHP中它會是['preg_replace'](http://php.net/manual/en/function.preg-replace.php)) –

回答

0

用正則表達式,它有助於儘可能具體,你可以

\[b\](\w+(?: \w+)*) - (\w+(?: \w+)*) \(\d+\) \(\w+\)\[\/b\] 
  • (\w+(?: \w+)*):場系列用空格分隔的單詞(數字算的話)
    • (?:)是非捕獲組
  • \(\d+\) \(\w+\):匹配(<數字> )(< word>)

這樣會更高效,並且不會匹配格式錯誤的數據,而不會給你一些未定義的結果。當您發現想要支持的無效案例時進行調整。

+0

這很酷。謝謝@Tezra這麼多。 –

1

試試這個正則表達式/ \(.*?\)/g

此相匹配的是有一個開放和右括號前面的空間的一切。

我不知道您使用哪種語言來運行正則表達式,因此,直到您更新標記爲止,我無法將其放入編程語言中。

1

我不知道任何像「HTML正則表達式」的東西,只是可以在HTML5 <input>標記中使用正則表達式作爲驗證規則。

[b]Author Name - Book Title (2004) (PDF)[/b]根本不對應於HTML。

如果您確信

  • 作者(S)不包含連字符(很強的假設)
  • 年和格式總是存在的,如圖

你可以過濾掉兩個字段的方式與您選擇作者和標題的方式相同...

您沒有指定正則表達式/引擎的風格,但是使用了您使用的語法,如下所示ULD工作:

\[b\](.+?) - (.+?) \(\d{4}\) \(.*?\)\[/b\] 

一個Perl RE可能看起來像

/\[b\] \s* (.+?) \s+ - \s+ (.+?) \s+ \(\d{4}\) \s+ \(.*?\) \s* \[\/b\]/x 

返回在分別爲$ 1和$ 2,作者和標題。如有必要,使用圓括號也可以捕獲2個屬性。

+0

謝謝,我會試試這種方式 –