首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式查找句子中间的回车

使用正则表达式查找句子中间的回车
EN

Stack Overflow用户
提问于 2012-02-05 03:14:02
回答 3查看 1.9K关注 0票数 1

我对regex非常陌生,但到目前为止,我喜欢它的强大功能。令人难以置信,尽管有很多东西需要我去思考。

我已经尝试解决这个问题有一段时间了,根据我在网上读到的内容测试了各种正则表达式。但我似乎遗漏了什么。

我在OpenOffice/LibreOffice中有一个很长的文档。作者使用了以下糟糕的布局实践,我需要删除和/或纠正这些实践:

1)行首的空格,用于缩进段落。

2)行尾的空格。不知道他们为什么会在那里。

3)在句子中间返回回车符以强制换行(我猜)。我称这些为“假CRs”。在这种情况下,任何没有句子定义标点符号的CR (句号、问号、感叹号,或者其中任何带有“后”的句子)都是“假CR”。如果在CR之前有适当的句子定义标点符号,那么我认为这是真正的CR,不希望删除它。

我已经能够很容易地完成#1和#2。但是#3把我难倒了。

我设法破解了一些东西,可以找到我想要的东西,但它将包括一行的最后一个字母,而不仅仅是CR。因此,这样做即使是一个空的替换也会去掉CR,但也会去掉最后一个字母。

任何帮助都将不胜感激。

我用来执行这个正则表达式的软件是TextSoap (在Mac上)。据我所知,它处理正则表达式是“正常”的方式,而不是它自己的不规则扭曲。

实际上,我想在LibreOffice/OpenOffice上的Find-Replace中运行生成的正则表达式,但它不接受任何标准的正则表达式。它们在TextSoap中工作得很好,但在OO/LO中没有结果。不知道为什么-似乎OO没有默认的Regex实现(或者我只是做错了什么)。因此,我目前正在将文本从LibreOffice文档复制到text soap,对其进行排序,然后再将其复制回来。

谢谢..。

乔纳森

更新:我应该提供一个例子(很抱歉忘了这样做):

这里有一个示例:http://best-mac-tips.com/wp-content/uploads/example.txt

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-05 05:36:47

此句中换行符的正则表达式应该在TextMate中有效:

代码语言:javascript
复制
(?<![\s.?!]"|[\s.?!])\s+

TM的正则表达式功能是由Oniguruma library提供的,它将接受由两个或更多具有不同但固定长度的替换项组成的后视。或者你可以直接使用它,它可以在任何支持lookbehinds的风格中工作:

代码语言:javascript
复制
(?<![\s.?!]")(?<![\s.?!])\s+

替换字符串将是单个空格。这也将取代简单的空格,但这不会有任何坏处。要去掉前导空格和尾随空格,请使用以下正则表达式:

代码语言:javascript
复制
^[ ]+|[ ]+$

...and将其替换为空。(括号实际上并不是必需的,它们只是让它更容易阅读。)

票数 2
EN

Stack Overflow用户

发布于 2012-02-05 03:29:54

在没有看到示例的情况下,我认为这可以找到任何\n或\r这不是句子的结尾:

代码语言:javascript
复制
 (.+?)([\n\r]+)(.+?[\.\?\!]+)

我怀疑,将匹配组1和匹配组3之间的空格组合在一起会返回您想要的字符串。

(更新,因为出于某种原因,我以为您使用的是python...)

另一个更新:在第一个捕获组之前添加\s*,在最后一个捕获组之后添加\s*将过滤掉这些缩进/空格。

\s*?(.+?)(\n\r+)(.+?.\?!+)\s*

票数 0
EN

Stack Overflow用户

发布于 2012-02-05 03:35:41

你需要的是一个lookbehind assertion

代码语言:javascript
复制
s/(?<![.!?]"?)\n/ /

(请注意,我认为您希望替换为一个空格,或者两个空格,否则看起来会很滑稽)。

你也许还能让反向引用起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9143680

复制
相关文章

相似问题

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