Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用正则表达式在文本中添加回车符?_C#_.net_Regex - Fatal编程技术网

C# 如何使用正则表达式在文本中添加回车符?

C# 如何使用正则表达式在文本中添加回车符?,c#,.net,regex,C#,.net,Regex,我有一个多行的文本文件。我将尝试设置一个模式,在一些文本行中添加一个新的回车符。这句话是这样的: lorem ipsum. 多洛·希特·阿梅特,是一位杰出的政界人士 好的,模式是一行后跟另一行,后面有一些字符,还有一个“[”字符。如果“[”不存在,模式将失败,并且还没有添加回车符 我如何使用正则表达式来实现它 我也在使用C作为编程语言和正则表达式引擎。我相信您可以使用\r作为回车,使用\n作为新行。什么味道?这里是为C做的: 编辑:以上是对原始问题的回答。在Peter Boughton的精彩回答

我有一个多行的文本文件。我将尝试设置一个模式,在一些文本行中添加一个新的回车符。这句话是这样的:

lorem ipsum.
多洛·希特·阿梅特,是一位杰出的政界人士

好的,模式是一行后跟另一行,后面有一些字符,还有一个“[”字符。如果“[”不存在,模式将失败,并且还没有添加回车符

我如何使用正则表达式来实现它


我也在使用C作为编程语言和正则表达式引擎。

我相信您可以使用\r作为回车,使用\n作为新行。

什么味道?这里是为C做的:

编辑:以上是对原始问题的回答。在Peter Boughton的精彩回答之后,我不需要添加太多内容。好的,也许这个,一个没有环顾断言的小正则表达式,将简单地用两个新行替换所有点后面的一个或多个新行

string newString = Regex.Replace(yourString, @"\.(\r|\n)+", ".\r\n\r\n");

如果要在后面添加换行符。则只需将其替换为自身和换行符。若要确保它是最后一个字符,请使用前视检查它后面是否有空格,即
(?=\s)


因此,要替换为换行符(大多数情况下建议):


如果必须使用回车符(即使在Windows上,也很少有地方需要回车符),只需添加一个:

replace( input , '\.(?=\s)' , '\.\r\n' )

如果您希望确保a.后面始终有两个换行符,并且如果已经需要,不会导致额外的换行符,那么它会变得更复杂,需要一个负的前瞻性,但如下所示:

replace( input , '\.(?!\S)(?:\r?\n){0,2}' , '\.\r\n\r\n' )
因为正则表达式引擎默认为贪婪,所以
{0,2}
将尝试匹配两次,然后是一次,然后是零次-在这一点上,非空格的负前瞻确保它实际上是一个单词的结尾

(如果您可能有两个以上的换行符,并且希望减少到两个,那么您可以使用
{0,}
,它将
*
作为快捷方式表示法。)



可能值得指出的是,上述任何一项都不会占用任何空格/制表符-如果需要,可以将lookaheads从
(?=\s)
更改为
\s+
,您可以再次替换
\n[\t]+
使用
\n
删除任何前导空格/制表符或类似内容,具体取决于您正在尝试执行的操作。

请,您能更通用一点吗???想象一下“el tiempo”是任何最后一个字符为“.”的文本。jaloplo,如果你想更通用,你应该在问题中说明。你还没有指定是否应该在“field.[FIS]”部分添加换行符。我认为这是显而易见的,但我对此表示歉意。我将在接下来的问题中尝试更具体。我没有“权限”要编辑问题,但对我们和未来的访问者来说,你能用以下内容更新问题:1)编程语言,2)英语单词的模式吗?即使有一个好的答案,如果问题清楚,也会对其他人有所帮助:)好的,很好的解释。但我必须在下一行添加一些字符和[”。如果此规则正常,则必须添加“\r\n”。您能告诉我如何执行此操作吗?您的意思是,如果找到
[
,您希望避免添加换行符吗?如果是,中间的示例可以更新为
\。(?=\s++[^\[])
-假设你的正则表达式引擎支持所有格量词-你用的是哪种类型的正则表达式?我用在C#上。我会测试它,然后告诉你它是否合适。@jaloplo:你能帮个忙,更新你的问题以包括你的所有要求吗?这样一来,它会一点一点地分散在评论中,这就是问题很难理解。@Peter:显然jaloplo使用C#,我添加了标记。目前,.NET不支持它们(主要是PCRE和Java支持)。对我的问题的回答如下:
replace( input , '\.(?=\s)' , '\.\r\n' )
replace( input , '\.(?!\S)(?:\r?\n){0,2}' , '\.\r\n\r\n' )