除了"

时间:2017-07-09 23:21:34

标签: regex notepad++

我有一个文本,其中我只想获得十六进制代码。 喜欢:" thisissometextthisistext \ x64 \ x6f \ x6e \ x74 \ x74 \ x72 \ x61 \ x6e \ x73 \ x6c \ x61 \ x74 \ x65someomemoretextoverhere"

可以使用 \ x .. 获取十六进制代码 但似乎我不能像(^ \ x ..)那样选择所有十六进制代码。

有任何解决方法吗?

4 个答案:

答案 0 :(得分:3)

您可以使用(?s)((?:\\x[a-fA-F0-9]{2})+)|.正则表达式(将匹配并捕获到第1组中的任何1 +十六进制值序列,或者只匹配包括换行符的任何其他字符)并替换为条件替换模式{ {1}}(将重新插入十六进制值链或将匹配替换为空字符串):

查找内容(?{1}$1\n:)
替换为(?s)((?:\\x[a-fA-F0-9]{2})+)|.

enter image description here

正则表达式详细信息

  • (?{1}$1\n:) - 与 (?s)相同,与新行选项相匹配
  • . - 第1组捕获一个或多个序列
    • ((?:\\x[a-fA-F0-9]{2})+) - \\x
    • \\x - 从[a-fA-F0-9]{2}a或数字
    • 的2个字母
  • f - 或
  • | - 任何一个字符。

替换模式

  • . - 如果第1组匹配:
    • (?{1} - 替换为其内容+换行符
    • $1\n - 其他用空字符串替换
  • : - 替换模式结束。

答案 1 :(得分:1)

尝试^.*?((\\x[a-f0-9]{2})+).*$并替换为$1

它应该保留十六进制代码

enter image description here

然后更换

enter image description here

答案 2 :(得分:0)

如果您已经能够使用正则表达式找到十六进制代码,那么您是否只能使用该信息从字符串中删除所有十六进制代码(如果需要保留原始代码,则从字符串的克隆中删除)和除了十六进制代码之外,你将留下所有文本。

答案 3 :(得分:0)

^仅作为字符类内部(和开头)的否定标记,不能用它来否定多个字符的子字符串。

要选择不是\xhh的所有内容,您可以使用此模式:

\G(?:\\x[a-f0-9]{2})*+\K(?=.|\n)[^\\]*(?:\\(?!x[a-f0-9]{2})[^\\]*)*

它首先与\xhh匹配,然后使用\K功能将其从匹配项中删除(删除左侧的全部内容)。模式的另一部分[^\\]*(?:\\(?!x[a-f0-9]{2})[^\\]*)*匹配所有不是\xhh的部分。由于此子模式可以匹配字符串末尾的空字符串,因此我添加了前瞻(?=.|\n)以确保至少有一个字符。 \G强制所有比赛都是有争议的。换句话说,它匹配上一场比赛结束时的位置。