用于选择多行的正则表达式

时间:2013-04-18 16:21:52

标签: regex visual-studio-2010 visual-studio notepad++

我有一个特定格式的文本文件..

!c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz
asdasda........................................................
asddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
!c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz...

我需要一个正则表达式来使用“查找和替换 - Visual Studio”重新格式化此文件。 Desc字段值已溢出到下一行。我需要将它们移回实际线。最终字符串应该像

    !c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyzsdasda.........asdddddd..
    !c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz...

我需要一个RE“desc =”,然后是下一个!符号

2 个答案:

答案 0 :(得分:1)

如@ X3074861X的评论中所述,您可以使用Notepad ++。

输入:

!c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz
asdasda........................................................
asddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
!c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz...

对于查找和替换,请选择模式为Regular expression,其选项如下:

Find what\r\n[^!]

Replace with留空。

输出:

!c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyzsdasda........................................................sddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
!c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz...

截图:

enter image description here

答案 1 :(得分:1)

找到Desc=([^\|\r\n]+)[\r\n](([^!\r\n][^\r\n]+[\r\n])*),替换为Desc=\1\2并重复,直到每一行以!开头(您可以使用^[^!]作为搜索expr进行测试,该搜索expr应该找不到任何内容)。

或者找到[\r\n]+,替换为空字符串。此后找到!,替换为\r\n!。这个建议有两个缺点。它会暂时生成非常长的行,您的编辑(特别是vs)可能会或可能不会对包含!的描述有错误或处理错误。

附录: 您的输入似乎是固定格式,直到Desc部分。如果确实如此,您可以使用备选#2,第1步,然后使用(!.{53}\|Desc=) / [\r\n]\1进行搜索/替换运行。