我是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](?=\})
,但我无法从名称列表中删除“和”。
请,您能给我一些建议吗?非常感谢。
答案 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
所说的表达。删除我们不需要的内容。由管道|
分隔的模式列表。可以将它们视为“分隔符”,以便于理解。