查找和替换 - 添加回车或换行符

225

以下字符串需要解析:

ford mustang,10,blue~~?bugatti veyron,13,black

我想用一个 换行符 替换掉 ~~?

使用 \n 进行替换只会添加字符串 "\n"

应该如何实现?

6个回答

320

请确保在“查找和替换”对话框中选择了“使用正则表达式”:

Find/Replace Dialog Use Regular expressions

注意,对于 Visual Studio 2010,在 Visual Studio 生产力工具 的 “快速查找” 扩展中(截至 2011 年 7 月更新),这种方法不起作用;您需要使用完整的“查找和替换”对话框(使用 Ctrl+Shift+HEdit --> Find and Replace --> Replace in Files),并将范围更改为“当前文档”。


5
在查找文本右侧使用“播放”按钮也很方便。 - Cel
3
如果你想匹配特殊字符,比如括号,记得在正则表达式开启时使用例如 \)的转义字符。 - Cel
2
在正则表达式中,?字符需要转义,因为它表示前一个元素是可选的。因此,正确的“查找内容”文本是~~\?,其中问号通过反斜杠进行转义。你给出的答案在示例文本中有效,因为它会贪婪地查找第二个波浪线并将其消耗掉,但是如果文本中任何地方存在单个波浪线,它也会不正确地被替换为换行符。 - ErikE
如果安装了 Productivity Power Tools,您仍然可以使用 Ctrl+Shift+H 然后 Ctrl+H 打开本机的 Visual Studio 查找/替换窗口。 - Neb
需要注意的是,如果选择了“使用正则表达式”,那么可以使用“\n”来查找(和替换)换行符。 - Jacob Lockard

33

您还可以尝试在 "替换为" 框中使用 \x0d\x0a 并勾选 "使用正则表达式" 选项,在 Visual Studio 的查找/替换功能中获得回车+换行符。 使用 \n(换行符)与使用 \x0a 相同。


1
查找:\r\n替换为:mytext\r\n使用正则表达式。 - Farid Z

17

如果您设置了使用正则表达式标志,那么\n字符将被转义。但请注意,您必须修改搜索术语以适应正则表达式的要求。在您的情况下,它应该像这样进行转义:\~\~\?


4
正则表达式中的'~'不需要转义,它是一个字面上的字符。这是错误的。 - ErikE

14

如果你想在使用正则表达式时避免转义搜索和替换字符串中的特殊字符,可以按照以下步骤操作:

  1. 使用关闭正则表达式,在原始字符串中搜索并将其替换为“UniqueString42”。
  2. 使用打开正则表达式,在“UniqueString42”中搜索并将其替换为“UniqueString42\nUniqueString1337”。
  3. 使用关闭正则表达式,在“UniqueString42”中搜索并将其替换为替换字符串的第一行(通常是原始字符串)。
  4. 在“UniqueString42”中搜索并将其替换为替换字符串的第二行。

请注意,即使你想手动选择第一个搜索和替换的匹配项,对于后面的三个步骤,也可以安全地使用“全部替换”。

示例

例如,如果要替换此内容:

public IFoo SomeField { get { return this.SomeField; } }

就是这样:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

你需要进行以下替换:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO(正则表达式关闭)。
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(正则表达式开启)。
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(正则表达式关闭)。
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(正则表达式关闭)。

@Alex 如果你有一个实际的解决方案来避免在将搜索和替换文本转换为正则表达式时手动转义,并花费接下来的10分钟来修复这样创建的怪物,我会非常高兴听到它,因为我的答案只是一个丑陋的hack。但正如你所看到的,所有在普通 Visual Studio 上工作且不需要额外插件的其他答案都需要使用正则表达式,因此必须转义简单文本。 - Suzanne Soy
2
我并不是有恶意地说那句话。抱歉,我忘记加上笑脸了 :D 关于解决方案,我没有涉及VS的解决方案。但我发现任何支持正则表达式的好用的外部编辑器(如notepad++等)都能很好地工作。 - Alex
2
UltraEdit是搜索替换的王者 - 在这里,您可以通过标记这些行并开始搜索来搜索换行符、断行符或任何其他内容。至于替换,您只需输入^n代表\n,^r代表\r和^t代表\t - 如果只有VS2010也能做到同样的事情 :-) - Miros
您可以随时访问http://regex101.com,以查看您的搜索字符串是否将匹配字面字符或被解释为正则表达式控制字符。 - ErikE

8

似乎在不进行额外步骤的情况下无法与Visual Studio 2017一起使用,即必须单击“在文件中查找”,然后修改该对话框的范围,快捷键默认为f#交互式。 - Mark Schultheiss

5

小小的警告:许多环境使用或需要"\r\n"而不仅仅是"\n"。我遇到了一个问题,就是在行末忘记输入"\r"导致我的正则表达式字符串无法与缺少不可见字符的字符串匹配,从而导致Visual Studio无法匹配我的正则表达式字符串。

因此,如果你正在进行查找或替换操作,请考虑"\r"。

有关 "\r"和 "\n" 的更多详细信息,请参见:https://dev59.com/3HA75IYBdhLWcg3wJFcL#3451192


1
谢谢你,我疯了一样试图弄清楚这个(Unix背景)。 - Jonathan E. Landrum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接