我有一个包含多行的文本文件。我将尝试设置一个模式,在文本的某些行中添加一个新的回车符。这条线是这样的:
lorem ipsum。
dolor sit amet,consectetur adipiscing elit [FIS] Donec feugiat
嗯,这个模式是一行,后面是一行,有一些字符和一个'['字符。如果'['不存在,则模式失败并且未添加回车。
如何使用正则表达式?
我也使用C#作为编程语言和regex引擎。
答案 0 :(得分:3)
如果你想在a之后添加换行符。然后你只需用自己和换行符替换它。要确保它是最后一个字符,请使用前瞻检查后面跟空格,即(?=\s)
因此,要替换换行符(建议在大多数情况下使用):
replace( input , '\.(?=\s)' , '\.\n' )
如果必须使用回车符(并且很少有需要的地方,即使在Windows上),您只需添加一个:
replace( input , '\.(?=\s)' , '\.\r\n' )
如果你想确保一个。后面总是跟着两个换行符,如果他们已经想要的话,不会引起额外的换行符,那么它会变得有点复杂,并且需要一个负向前瞻,但看起来像这样:
replace( input , '\.(?!\S)(?:\r?\n){0,2}' , '\.\r\n\r\n' )
因为正则表达式引擎默认为贪婪,{0,2}
将尝试匹配两次,然后一次,然后是零次 - 此时非空格的负前瞻确保它实际上是一个单词的结尾
(如果您可能有两个以上的换行符,并希望减少到两个换行符,则可以使用{0,}
代替*
作为快捷符号。)
可能值得指出的是,以上都不会消耗任何空格/标签 - 如果需要,可以将前瞻从(?=\s)
更改为\s+
,您可以再次替换{{ 1}} \n[ \t]+
删除任何前导空格/标签或类似内容,具体取决于您要执行的操作。
答案 1 :(得分:2)
我相信您可以使用\ r进行回车,使用\ n进行换行
答案 2 :(得分:1)
string yourString = @"el tiempo.
campo vectorial vector field. [FIS] Campo ";
string newString = Regex.Replace(yourString, "el tiempo.", "$0\r\n"); // just \n may be sufficient though
编辑:以上是对原始问题的回答。在Peter Boughton的出色答案之后,我不需要添加太多东西。好吧,也许这个,一个没有外观断言的小正则表达式,只需用两个换行符替换所有点后跟一个或多个换行符。
string newString = Regex.Replace(yourString, @"\.(\r|\n)+", ".\r\n\r\n");