如何在特定字符的特定匹配项之间选择文本?
例如在下面的字符串中:
的Lorem |存有|是|简单地|虚设|文本|的 A123 |的|印刷|和|排版|工业|
我想在' |'的第6和第7次发生之间删除/替换文字。字符,即单词' A123'。
是否可以使用Regex进行此操作?
答案 0 :(得分:1)
您可以使用计数器量词,通常用花括号内的数字表示(例如pattern{7}
)。例如,这个sed命令用REP:
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|
如果要每隔七次更换一次,可以删除主色号。如果需要操作/提取它,还可以在第二部分([^|]+
)周围添加括号。