我正在使用 TextCrawler * regxp *来对齐现有的纯文本文件。 文件内的文本是连续的,没有换行符 .... moredata ....
,演员名单:
Amy Brenneman, Aaron Eckhart, Catherine Keener, Natassja Kinski
, Jason Patric, Ben Stiller,
发布的电影:
Gladiator,Matrix Reloaded,The Shawshank Redemption,Pirates of the Caribbean
- Curse of the Black Pearl,Monsters Inc,
类型:
SciFi,Romance,Drama,Action,Comedy,Advenure,Animated,Western,Horror
.... .... MOREDATA
我试图找到逗号和冒号之间的字符串,并用相同的字符串替换,但在找到的模式之前添加了新行。 我试过跟随,但它匹配字符串形式最外面的逗号到冒号。
[,]{1}.[A-Z].*[:]
有什么想法吗?哪里出错了?
答案 0 :(得分:1)
为什么不使用这种模式:
search: (?<=,)[^,:]+(?=:)
replace: \n$0
模式细节:
(?<=,) # lookbehind assertion: only a check that means "preceded by ,"
[^,:]+ # negated char class: all characters except , and :
(?=:) # lookahead assertion: only a check that means "followed by :"
Lookarounds只是可以使模式失败或成功的测试,它们不是匹配结果的一部分。
答案 1 :(得分:1)
下面提到的模式有效:
搜索模式:(,?[^:,] +:)
替换字符串: \ n \ 1 \ n
例如:
给定一个包含内容的文件a.txt:
演员名单:A,B,C,发行的电影:D,E,F,类型:G,H,I
perl -pe "s@(,?[^:,]+:)@\n\1\n@g" a.txt
上述命令产生以下格式的输出:
演员名单:
A,B,C
,电影发布:
d,E,F
,流派:
G,H,I
我希望上面的输出符合您的期望。