0

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

!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...

我需要一个正则表达式来使用 Find and Replace - 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=”,然后是任何内容,直到下一个!象征

4

2 回答 2

1

正如@X3074861X 的评论中提到的,您可以使用记事本++。

输入:

!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...

截屏:

在此处输入图像描述

于 2013-04-18T16:38:11.787 回答
1

find Desc=([^\|\r\n]+)[\r\n](([^!\r\n][^\r\n]+[\r\n])*), replace withDesc=\1\2并重复,直到每一行都以开头!(您可以将^[^!]其用作搜索 expr 进行测试,它应该什么也找不到)。

或者 find [\r\n]+,替换为空字符串。此后查找!,替换为\r\n!. 这个建议有两个缺点。它会暂时产生很长的行,您的编辑器(尤其是 vs)可能会或可能不会遇到困难,并且处理包含!不正确的描述。

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

于 2013-04-18T16:39:02.080 回答