2017-06-09 41 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

谢谢,我会试试这种方式 –