我有一个文件1.txt,内容低于
F1,F2,[AS1,AS2],[AS3,AS4]
F3,F4,F5,[AS5,AS6]
我需要在perl中编写一个正则表达式,这样我才能更改分隔符','介于[' and ']
到|
之间。
我在下面试过,但它没有用。
@qr = $st = /\{(.*)(\|)+\}/;
其中$st
有输入字符串。
答案 0 :(得分:1)
对于早于Perl 5.14的Perl版本,你不能使用像
这样的正则表达式echo "[as1,as2,as3],[as4,as5]" | perl -lpe 's/(?:\[|\G(?!^))[^]]*?\K,/|/g'
请参阅online demo。
模式详情:
(?:\[|\G(?!^))
- 文字[
或上一场比赛的结尾(\G(?!^)
)[^]]*?
- 除]
之外的零个或多个字符,尽可能少匹配\K
- 删除整个匹配值,
- 匹配中的逗号(已替换为|
)。对于Perl版本5.14及更新版本(其中r
修饰符出现),您可以将[...]
子字符串与\[[^][]+]
正则表达式匹配({{1}然后是[
和[
以外的1 +个字符,然后是]
)并在这些匹配项中执行替换:
]
请参阅online demo。
答案 1 :(得分:1)
简单的单行程可以解决您的任务:
输入:
F1,F2,[as1,as2],[as3,as4]
F3,F4,F5,[as5,as6]
perl -lpe 's/\[(.*?),(.*?)\]/[$1|$2]/g' file
输出:
F1,F2,[as1|as2],[as3|as4]
F3,F4,F5,[as5|as6]