正则表达式:从句子中排除一个词

时间:2018-11-11 20:31:09

标签: regex

我是regex的初学者,现在我想解决以下示例:

我在下面有这个文件,我只想匹配名称。

 @misc{diaz2006automatic,
  title={AUTOMATIC ROCKING DEVICE},
  author={Diaz, Navarro David and Gines, Rodriguez Noe},
  year={2006},
}

@article{gentsch1992identification,
  author={GenTSCH, JoN R and Glass, RI and Woods, P and Gouvea, V and Gorziglia} 

我创建了这个正则表达式: (?<=author=\{).*[a-z](?=\}),但我无法从名称列表中删除“和”。

请,您能给我一些建议吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

我发现在“一个命令”中执行此操作的唯一方法是以下行:

sed -nr -e '/^\s*author=/ s/(\s*author=\{|\}|\s+and\s+|,)//pg'

结果:

Diaz Navarro DavidGines Rodriguez Noe
GenTSCH JoN RGlass RIWoods PGouvea VGorziglia 

在这里,“一个命令”是指一个表达式(简单引号之间的全部内容)。当然,这种观点可能会引起争议。

说明:

  • -n:不输出行
  • -r:使用扩展的正则表达式
  • -e:我们的表达:
    • /^\s*author=/ [...]仅在该行与此正则表达式匹配时才执行下一个操作。
    • s/(\s*author=\{|\}|\s+and\s+|,)//pg所说的表达。删除我们不需要的内容。由管道|分隔的模式列表。可以将它们视为“分隔符”,以便于理解。