我正在尝试从文本中分隔标题,标题和第一段文字是内联的。
<p>GUSLÜN SÜNNETLERİ VE BAZI İNCELİKLERİ Gusle niyet ederek, Besmele ve misvâk ile başlamak. Evvelâ elleri, oyluk yerlerini yıkamak, bedende meni vesâire eseri varsa gidermek.</p>
下面的regex命令只捕获第一个大写单词。我需要明确定义字符集,因为非ascii字符(如Â, Î, Û
)。我使用了!
而不是正斜杠/
。
%s!\v(<[ABCÇDEFGĞHIİJKMLMNOÖPRSŞTUÜVYZÎÂÛ]{2,}>{-1,})(.*)$!<h2>\1</h2>\r\r\2!g
例外结果是
<p>
<h2>GUSLÜN SÜNNETLERİ VE BAZI İNCELİKLERİ</h2>
Gusle niyet ederek, Besmele ve misvâk ile başlamak.Evvelâ elleri, oyluk yerlerini yıkamak, bedende meni vesâire eseri varsa gidermek.</p>
提示:查找大写单词的最后一次出现,也可以帮助我。
答案 0 :(得分:1)
试试这个
%s!\v((<[ABCÇDEFGĞHIİJKMLMNOÖPRSŞTUÜVYZÎÂÛ]{2,}>{-1,}\s*)+)\s+(.*)$!<h2>\1</h2>\r\r\3!g
答案 1 :(得分:1)
什么是“非unicode unicode”?也许你想编辑这个问题?
$
中的(.*)$
是多余的,因为*
是贪婪的。由于您最终将\2
放在替换模式的末尾,因此您可以通过不捕获和替换第二部分来简化命令:
:s!<pattern>!<h2>\1</h2>\r\r!
(最后的g
标志也是多余的。)
如果您正确设置了'iskeyword'
,则\k
会正确匹配单词字符,但遗憾的是\u
会忽略此设置,只能固定地匹配ASCII大写字母。但是您可以将角色类简化为[A-ZÇĞİÖŞÜÎÂÛ]
(除非排除Q,W和X很重要)。通过这些简化,rednaw的答案变为
:s!\v((<[A-ZÇĞİÖŞÜÎÂÛ]{2,}>{-1,}\s*)+)\s+!<h2>\1</h2>\r\r!
要查找一行中的最后一个大写字词,请尝试
/\v.*\zs<[A-ZÇĞİÖŞÜÎÂÛ]{2,}
详情请见
:help /\k
:help 'iskeyword'
:help /[]
:help /\zs
:help pattern