【问题标题】:How can I add a carriage return in a text using regex?如何使用正则表达式在文本中添加回车?
【发布时间】:2009-11-03 21:30:35
【问题描述】:

我有一个包含多行的文本文件。我将尝试设置一个模式以在文本的某些行中添加新的回车符。这几行是这样的:

lorem ipsum。
dolor sit amet, consectetur adipiscing elit [FIS] Donec feugiat

嗯,模式是一行后面跟着其他的,它有一些字符和一个“[”字符。如果 '[' 不存在,则模式失败并且没有添加回车。

如何使用正则表达式来做到这一点?

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

【问题讨论】:

标签: c# .net regex


【解决方案1】:

如果你想在 .然后你只需用它自己和换行符替换它。为确保它是最后一个字符,请使用前瞻检查它后面是否有空格,即(?=\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+,您可以将\n[ \t]+第二次替换为@987654332 @ 删除任何前导空格/制表符或类似内容,具体取决于您要执行的操作。

【讨论】:

  • 好的,很好的解释。但是我必须在下一行包含一些字符和'['。如果此规则正常,则必须添加“\r\n”。你能告诉我该怎么做吗?
  • 如果找到[,您的意思是要避免添加换行符吗?如果是这样,中间的例子可以更新为\.(?=\s++[^\[])——假设你的正则表达式引擎支持所有格量​​词——你用的是哪种正则表达式?
  • 我在 C# 上使用它。我会测试它并告诉你它是否没问题。
  • @jaloplo:您能帮我们一个忙并更新您的问题以包含所有您的要求吗?这样它就会一点一点地分散在 cmets 中,这很难理解。
  • @Peter:显然 jaloplo 使用 C#,我添加了标签。目前,.NET 不支持它们(主要是 PCRE 和 Java regular-expressions.info/possessive.html 支持)。
【解决方案2】:

我相信你可以使用 \r 回车和 \n 换行

【讨论】:

    【解决方案3】:

    什么味道?这是为 C# 完成的:

    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
    

    编辑:以上是对原始问题的回答。在彼得鲍顿的出色回答之后,我不需要添加太多。好吧,也许这个没有环顾断言的小正则表达式将简单地用两个换行符替换所有后跟一个或多个换行符的点。

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

    【讨论】:

    • 拜托,你能不能更通用一点???想象一下“el tiempo”。是“。”的任何文本是它的最后一个字符。
    • jaloplo,如果你想要更通用的,你应该在问题中说明这一点。您还没有指定是否应该在“字段。[FIS]”部分添加换行符。
    • 我认为这很明显,但我对此表示歉意。我会在接下来的问题中尝试更具体。
    • 我没有编辑问题的“权利”,但对于我们和未来的访问者,您能否更新 q.与:1)编程语言,2)英语单词的模式?即使同时有一个很好的答案,如果问题很清楚,它也会对其他人有所帮助:)
    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 2018-08-02
    • 2021-02-07
    • 2013-09-29
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多