我对正则表达式很新,但到目前为止还喜欢它的力量。令人难以置信的是,尽管我的头脑很多。
我一直试图想出这个问题一段时间,根据我在线阅读的内容测试各种正则表达式。但我似乎错过了一些东西。
我在OpenOffice / LibreOffice中有一个很长的文档。作者使用了以下不良布局实践,我需要删除和/或纠正:
1)行前面的空格,用于缩进段落。
2)行尾的空格。不知道为什么他们在那里。
3)马车在句子中间返回以强行包裹(我猜)。我将这些称为“假CR”。基本上任何没有句子定义标点符号的CR(句号,问号,感叹号或其中任何一个带有“之后的”)在这种情况下都是“假CR”。如果在CR之前有适当的句子定义标点符号,那么我认为这是一个真正的CR,并且不希望将其删除。
我已经足够轻松地完成了#1和#2。但是#3让我很难过。
我设法将一些可以找到我想要的东西放在一起,但它会包括该行的最后一个字母,而不仅仅是CR。因此,即使是空的替换也会消除CR,但也是最后一个字母。
非常感谢任何帮助。
我用来执行这个正则表达式的软件是TextSoap(在Mac上)。据我所知,处理正则表达式是“正常”的方式,而不是在它上面有自己的不规则扭曲。
我实际上想在LibreOffice / OpenOffice上的Find-Replace中运行生成的正则表达式,但它不接受我抛出的任何标准正则表达式。它们在TextSoap中工作正常,但在OO / LO中没有结果。不知道为什么 - 似乎OO没有Regex的默认实现(或者我只是做错了)。因此,我目前正在将LibreOffice文档中的文本复制到文本soap中,将其整理出来并将其复制回来。
谢谢...
乔纳森
更新: 我应该提供一个例子(抱歉忘记这样做):
这里有一个示例:http://best-mac-tips.com/wp-content/uploads/example.txt
答案 0 :(得分:2)
这个中间句子换行符的正则表达式应该在TextMate中起作用:
(?<![\s.?!]"|[\s.?!])\s+
TM的正则表达式功能由Oniguruma library提供,它将接受由两个或更多具有不同但固定长度的备选方案组成的后备。或者你可以使用它,它应该适用于支持lookbehinds的任何风格:
(?<![\s.?!]")(?<![\s.?!])\s+
替换字符串将是单个空格。这也将取代简单的空间,但这不会伤害任何东西。要摆脱前导和尾随空格,请使用此正则表达式:
^[ ]+|[ ]+$
......并将其替换为空。 (括号不是必需的,它们只是使它更容易阅读。)
答案 1 :(得分:0)
如果没有看到一个例子,我认为这可以找到任何不是句末的\ n或\ r \ n:
(.+?)([\n\r]+)(.+?[\.\?\!]+)
我怀疑,将匹配组1和3与之间的空格组合将返回您想要的字符串。
(更新,因为出于某种原因我假设你使用的是python ......)
另一个更新:在第一个捕获组之前添加\ s *,在最后一个捕获组之后添加\ s *将过滤掉那些缩进/空格。
\ S *?(。+?)([\ n \ R] +)(。+?[\?] +)\ S *?
答案 2 :(得分:0)