我有一大堆文字(没有代码、数字或类似的东西)。句子有时会在“中间”被“段落”或“手动换行”分割。
例如:
The most obvious part was a hollow, echoing quiet, made by things that
were lacking. If there had been a wind it would have sighed through the
trees, set the inn’s sign creaking on its hooks, and brushed the silence
down the road like trailing autumn leaves. If there had been a crowd,
even a handful of men inside the inn, they would have filled the silence
with conversation and laughter, the clatter and clamor one expects from
a drinking house during the dark hours of night. If there had been music
... but no, of course there was no music. In fact there were none of
these things, and so the silence remained.
我想创建一个正则表达式或扩展替换,以便可以将这些行拼接在一起。
我曾经在 Microsoft Word 中这样做过,我搜索了“换行符”,其前面有一个字母字符(而不是点 (.) 或感叹号 (!)、问号 (?) 或引号 ("),然后将其替换为空。
我不再使用 microsft word 了,虽然 open office 也可以做到,但这是一个非常非常缓慢的过程。
有没有办法在 notepad++ 中使用正则表达式或扩展替换来做到这一点?
答案1
使用正则表达式,您可以执行以下操作:
找什么 :([^.!?"])\r\n
替换:($1
需要添加尾随空格,但在使用 Markdown 渲染时不会显示)
解释
([^.!?"])
将对除、.
或之外的任何字符进行分组。如果您实际上希望它允许任何字母数字字符,则可以将其更改为,这将匹配从到 的任何字符,无论是大写还是小写,任何数字或下划线 ( )。如果您确实只允许 到,则可以使用。!
?
"
([\w])
A
Z
_
A
Z
([A-Za-z])
方括号的作用是“允许/禁止以下字符”(通过^
在打开的方括号后添加字符来指定禁止)。方括号还允许上述语法A-Z
,正如您所期望的那样,允许两个提供的值之间的任何内容。
最后,通过使用分组周围的括号(适用于上面提供的所有变体),可以使用占位符将该值放回到字符串中$1
,这将在下面进一步讨论。
\r\n
与 Notepad++ 中的换行符匹配(在其他编辑器中,换行符可能是\n
或\r
代替)。
总之,正则表达式本身的两个部分确保仅匹配您指定的字符,后跟换行符。
替换$1
语句(再次确保在后面添加一个空格)将获取我们在正则表达式本身中匹配的内容(该行中最后一个字符,后面跟着一个换行符)并将其放回该行(这样我们就不会删除该字符,如果没有此语句,就会发生这种情况)。空格的存在只是为了确保当将行拉到一起时,单词仍然不同并且不会合并在一起。