如何使用正则表达式更改书籍/作者列表的格式?

时间:2010-12-11 23:49:58

标签: regex

我有这种格式的书籍/作者名单:

1. Suttree by Cormac McCarthy
2. Summersault by April Willis
3. Autumn's Ghost by Brian Johnson

我需要的是将其转换为这种格式:

Cormac McCarthy - Suttree
April Willis - Summersault
Brian Johnson - Autumn's Ghost

我怎么能用正则表达式做到这一点?

2 个答案:

答案 0 :(得分:4)

/^\d+\. (.*) by (.*)$/替换为$2 - $1

请注意,书名可以包含单词“by”,理论上也可以包含作者姓名。因此,在某些情况下,可能有多种方法来解析结果,可能不清楚哪种方法是正确的解释。您可能希望在书籍列表中搜索多次出现“by”字样的行,并手动验证它们是否已正确解析。

答案 1 :(得分:0)

匹配正则表达式^\d+\.[ \t]+(.+)[ \t]+by[ \t]+(.+)$,并使用$2 - $1\2 - \1替换每个匹配项,具体取决于您的正则表达式引擎。正则表达式的工作原理如下:

  1. ^:在一行开头匹配。
  2. \d+\.:首先,匹配一个或多个数字后跟文字.
  3. [ \t]+:匹配一个或多个空格或标签。
  4. (.+):尽可能多地匹配(书),并将其保存为第一个捕获组。
  5. [ \t]+by[ \t]+:匹配字符串by,包围一个或多个空格或标签。
  6. (.+):尽可能多地匹配(作者),并将其保存为第一个捕获组。
  7. $:匹配一行的结尾。