首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从小写字符中提取的Vim Regex拆分线

从小写字符中提取的Vim Regex拆分线
EN

Stack Overflow用户
提问于 2013-12-25 13:16:55
回答 2查看 102关注 0票数 1

我试图将标题从文本中分离出来,标题和文本的第一段是内联的。

代码语言:javascript
复制
<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字符(如Â, Î, Û),我需要显式地定义字符集。我使用的是!而不是正斜杠/

代码语言:javascript
复制
%s!\v(<[ABCÇDEFGĞHIİJKMLMNOÖPRSŞTUÜVYZÎÂÛ]{2,}>{-1,})(.*)$!<h2>\1</h2>\r\r\2!g

例外结果是

代码语言:javascript
复制
<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>

提示:找到大写单词的最后一次出现,也能帮我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-25 15:12:00

什么是“非unicode unicode字符”?也许你想编辑这个问题?

因为$是贪婪的,所以(.*)$中的*是多余的。由于最后将\2放在替换模式的末尾,所以可以通过根本不捕获和替换第二部分来简化命令:

代码语言:javascript
复制
:s!<pattern>!<h2>\1</h2>\r\r!

(最后的g标志也是多余的。)

如果您正确设置'iskeyword',那么\k将正确匹配单词字符,但不幸的是,\u忽略了此设置,只顽固地匹配ASCII大写字母。但是您可以将字符类简化为[A-ZÇĞİÖŞÜÎÂÛ] (除非排除Q、W和X是很重要的)。通过这些简化,rednaw的答案变成了

代码语言:javascript
复制
:s!\v((<[A-ZÇĞİÖŞÜÎÂÛ]{2,}>{-1,}\s*)+)\s+!<h2>\1</h2>\r\r!

若要在一行中找到最后一个大写单词,请尝试

代码语言:javascript
复制
 /\v.*\zs<[A-ZÇĞİÖŞÜÎÂÛ]{2,}

有关详细信息,请参阅

代码语言:javascript
复制
:help /\k
:help 'iskeyword'
:help /[]
:help /\zs
:help pattern
票数 1
EN

Stack Overflow用户

发布于 2013-12-25 13:36:47

试试这个

代码语言:javascript
复制
%s!\v((<[ABCÇDEFGĞHIİJKMLMNOÖPRSŞTUÜVYZÎÂÛ]{2,}>{-1,}\s*)+)\s+(.*)$!<h2>\1</h2>\r\r\3!g
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20773198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档