正则表达式替换转义字符串中的模式控制字符

时间:2016-01-20 10:47:07

标签: regex string controls

我有一个包含某些控制字符的转义字符串。 控制字符是ACKSTX类型。 参考:http://ascii.cl/control-characters.htm

我需要用~替换所有控制字符,最好是所有连续控制字符。

实施例。输入

%00%00%00%02THE%20QUICK%BROWN%00%00%00%0D%00%00%00%0FFOX%20JUMPED%00%00%00%0EOVER%20THE%00%00%4E%02LAZY%20DOG

我想要的输出应该是:

~THE%20QUICK%20BROWN~FOX%20JUMPED~OVER%20THE~LAZY%20DOG

为了我自己和其他人,我寻找的方法是替换一种模式,在这种情况下,它会像%0?%0?%0?%0?意味着任何可能蔓延到文本中的东西。

字符串模式

  1. 字符串的长度应为12

  2. 字符串应包含4个百分比零符号ex。 %0

  3. 我也对其他建议持开放态度。

    意图是从字符串中删除所有控制字符。用~替换只是为了保留一个选项卡上的选项(调试)。

3 个答案:

答案 0 :(得分:1)

试试这个表达式:

(%[0-13-9A-F][0-9A-F])+

它找到重复的所有控制字符序列,除了%20。

有了它,我得到了这个输出:

~THE%20QUICK%BROWN~FOX%20JUMPED~OVER%20THE~LAZY%20DOG

答案 1 :(得分:0)

你可以拿出某事。像:

(%[0-9A-F]{2})
# match a %,
# followed by 0-9, A-F two times

根据您的编程语言(未指定?),匹配all并将捕获组$ 1替换为"~"。然后你的字符串将成为:

~~~~THE~QUICK%BROWN~~~~~~~~FOX~JUMPED~~~~OVER~THE~~~~LAZY~DOG 

请参阅a demo on regex101.com

答案 2 :(得分:0)

当您说出所有控制字符时,您可能想要了解以下引用。

  

控制字符不会产生输出,而是通常   以某种方式控制终端:例如,换行符和退格键   控制字符。在ASCII平台上,在ASCII范围内,字符   其代码点介于0和31之间,加上127(DEL)   控制字符;在EBCDIC平台上,他们的同行是   控制人物。

您似乎将%4E视为对应字母N

的控制字符

此外,您的输入中有%BROWN个字母;我相信你希望它是%20BROWN

如果符合您的要求,那么以下正则表达式应该适合您

  

(:%(:(:???[0-1] [0-9A-F])| 7F))+

确保您使用~重复替换此模式。此外,您可能需要不区分大小写的匹配

英语故障:

  

匹配任何具有百分号的内容,后跟任意数字,最多1F   或者数字7F

以下是它的perl实现

$s = q(%00%00%00%02THE%20QUICK%20BROWN%00%00%00%0D%00%00%00%0FFOX%20JUMPED%00%00%00%0EOVER%20THE%00%00%4E%02LAZY%20DOG);
$s =~ s/(?:%(?:(?:[0-1][0-9A-F])|7F))+/~/gi;
print $s;
# output : ~THE%20QUICK%20BROWN~FOX%20JUMPED~OVER%20THE~%4E~LAZY%20DOG