如何在特定字符的特定事件之间选择文本

时间:2017-06-04 08:57:24

标签: regex

如何在特定字符的特定匹配项之间选择文本?

例如在下面的字符串中:

  

的Lorem |存有|是|简单地|虚设|文本|的 A123 |的|印刷|和|排版|工业|

我想在' |'的第6和第7次发生之间删除/替换文字。字符,即单词' A123'。

是否可以使用Regex进行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用计数器量词,通常用花括号内的数字表示(例如pattern{7})。例如,这个sed命令用REP:

替换A123
sed 's/\(\([^|]*|\)\{6\}\)[^|]*/\1REP/'

答案 1 :(得分:1)

您没有指定POSIX,PCRE或其他一些正则表达式,但我会假设PCRE。虽然正则表达式不允许您选择“第N个出现的字符”,但如果存在某种模式,您始终可以选择第N个出现的组。

在您的情况下,由于管道是分隔符,您始终可以选择一组任意字符后跟管道,然后选择该组6次,然后选择任何内容,直到下一个管道实际获取您的字符。由于您似乎是PHP中最活跃的,因此这是一种PHP方法:

$data = "Lorem|Ipsum|is|simply|dummy|text|A123|the|printing|and|typesetting|industry|";
$foo_data = preg_replace('/^((.*?\|){6})[^|]+/', '$1FOO', $data);
echo $foo_data;  // Lorem|Ipsum|is|FOO|dummy|text|A123|the|printing|and|typesetting|industry|

如果要每隔七次更换一次,可以删除主色号。如果需要操作/提取它,还可以在第二部分([^|]+)周围添加括号。