相同的捕获组以及如何重用它们

相同的捕获组以及如何重用它们

我有以下正则表达式sed可以工作:

sed -i -E "s/customer_metadata[(]([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6])/\5,$NEW_DATA/g"  file  

但我怀疑它可以被简化,因为捕获组的模式是重复的。此外,\5由于每组都有 ,所以我正在对第二组进行计数,这一事实()?似乎很容易出错。
有没有办法改进这个正则表达式?

答案1

  • [0-9][0-9][0-9]*是相同的[0-9]{2,}
  • ([A-Z][a-z]-){0,1}是相同的([A-Z][a-z]-)?
  • 去掉一些括号。

缩写表达式:

customer_metadata[(][0-9]{2,}-([A-Z][a-z-]-)?[3-6],[0-9]{2,}-([A-Z][a-z]-)?[3-6],([0-9]{2,}-([A-Z][a-z]-)?[3-6])

要不就

customer_metadata[^,]+,[^,]+,([0-9]{2,}-([A-Z][a-z]-)?[3-6])

这取决于您是否需要非常小心并验证前两个逗号之间的位格式是否正确。

要不就

customer_metadata[^,]+,[^,]+,([^-]+-([^-]+-)?.)

验证第三个逗号分隔的字符串是否在something-something-characteror 的形式中something-character

相关内容