我需要正规更换

时间:2017-05-06 20:25:41

标签: regex

我需要正则表达式替换以强调我的电影列表的拳头字母...

样品:

我想从这个列表中获取

Camp (2004)
Can't Hardly Wait (1998)
Candy (2006)
Canyons, The (2014)
Daddy Day Care (2003)
Daddy and Them (2002)
Daddy's Home (2016)
Eating Out: All You Can Eat (2010)
Eddie the Eagle (2016)
Eddie (1997)

to get this

Camp (2004)
Can't Hardly Wait (1998)
Candy (2006)
Canyons, The (2014)

D

Daddy Day Care (2003)
Daddy and Them (2002)
Daddy's Home (2016)

E

Eating Out: All You Can Eat (2010)
Eddie the Eagle (2016)
Eddie (1997)

我试过这样的事情

^(\ w)之间。+ \ r \ n ^ [^ $ 1] +

找到以不同字母开头的两行(这是主要问题),但它不起作用。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

我能够使用Sublime Text实现这一目标。

你可以尝试:

^(.)(.*)\n(?!\1)

取代:

$1$2\n\n$1\n\n

修改(因为问题已被修改:字母前缀而不是后缀):

再次使用Sublime Text,我做了:

^(.)(.*)\n(?!\1)(.)

替换为:

$1$2\n\n$3\n\n$3

答案 1 :(得分:2)

这是一个在vim中运行的搜索/替换命令:

:%s/^\(.\).*\n\%(\1.*\n\)*/\1\r\r&\r/g

我们只是匹配尽可能多的以相同字母开头的行,而不是试图找到一条不以某个字母开头的行。

答案 2 :(得分:0)

感谢所有人,但我现在看到另一个问题,它在大写字母和小写字母上有所不同,它错误地打破了列表并插入了那封信。

示例:

...
...
I

Icon
IP Man

i

iPad

I

Iron Man
Ireland
....
...

但是我可以稍后手动修复它。

我更喜欢WiktorStribiżew制作的解决方案

^(\w)(.*)(\R)(?!\1)(?=\w)替换为$1$2$3$3$1$3$3

但是根据我编辑过的问题,需要调整到以该字母开头的电影之前的正确字母。

感谢所有!!