寻找先进的RegEx替代配方

时间:2016-09-10 18:44:10

标签: regex visual-c++ notepad++

我想要查找/替换代码。我使用的是NotePad ++,但如果能够开启可能性,它可以使用其他任何东西。

这就是我目前正在使用的内容:

Asus Zenfone 4
<DeviceId>
<AndroidBoardName>EeePad
<AndroidBootloader>unknown
<DeviceBrand>asus
<DeviceModel>WW_ZenFone
<DeviceModelIdentifier>LRX21V
<DeviceModelBoot>redhookbay
<HardwareManufacturer>asus
<HardwareModel>ASUS_T00I
<FirmwareBrand>ASUS_T00I
<FirmwareTags>release-keys
<FirmwareType>user
<FirmwareFingerprint>asus/WW_ZenFone/ASUS_T00I:5.0/LRX21V/WW_ZenFone-V7.4.4-20150831:user/release-keys

我需要做的是使它看起来如下:

Asus Zenfone 4
{
DeviceId = "",
AndroidBoardName = "EeePad",
AndroidBootloader = "unknown",
DeviceBrand = "asus",
DeviceModel = "WW_ZenFone",
DeviceModelIdentifier = "LRX21V",
DeviceModelBoot = "redhookbay",
HardwareManufacturer = "asus",
HardwareModel = "ASUS_T00I",
FirmwareBrand = "ASUS_T00I",
FirmwareTags = "release-keys",
FirmwareType = "user",
FirmwareFingerprint = "asus/WW_ZenFone/ASUS_T00I:5.0/LRX21V/WW_ZenFone-V7.4.4-20150831:user/release-keys",
},

我希望这可以使用RegEx及其高级查找/替换方法。以下是我认为所有人都需要做的事情:

  1. 在电话名称后添加换行符,然后插入{后跟另一个换行符
  2. 找到开头&lt;并删除它
  3. 找到结束&gt;并用[space] = [space]
  4. 替换它
  5. 忽略开始和结束之间的文字&lt;&gt;
  6. 关闭&gt;
  7. 后围绕单词的引号
  8. 在最后一个引用后添加逗号
  9. 添加换行符并插入},
  10. 如果我在我的脑海中,请告诉我,我将完成手工复制/粘贴所有内容。

1 个答案:

答案 0 :(得分:1)

使用替换为激活的正则表达式,可以在Notepad ++中执行此操作。

然后,您可以搜索(?:\G(?<!^)|(.+))\R<([^>]*)>(.*+)((?!\R<))?并替换为(?{1}$1\r\n\{:)\r\n$2 = "$3",(?{4}\r\n\},:)

搜索模式细分:

  • (?:\G(?<!^)|(.+)) - 匹配上一个匹配的结尾,如果它不是一行的开头(\G匹配第一次运行中字符串的开头)或匹配任何字符(换行符除外) ),一次或多次并将其存储到第一组中。
  • \R<([^>]*)>(.*+) - 匹配换行符后跟<,然后匹配任意数量的字符>(存储到第2组),然后>然后任意金额字符直到行尾(存储到第3组)
  • ((?!\R<))? - 如果下一行未以<开头
  • ,则存储空组4

替换模式分解:

  • (?{1}$1\r\n\{:) - 条件替换:如果组1存在,则获取组1的内容,然后换行(您可能希望使用\n而不是\r\n,具体取决于您的系统默认换行符)
  • \r\n$2 = "$3", - 添加换行符,然后是第2组的内容,然后是空格=空格,最后是第3组的内容,由"
  • 包围
  • (?{4}\r\n\},:) - 条件替换:如果存在第4组,请添加换行符},