Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Regex删除除特定标记外的控制字符_Java_Regex - Fatal编程技术网

Java Regex删除除特定标记外的控制字符

Java Regex删除除特定标记外的控制字符,java,regex,Java,Regex,在加载和反序列化字符串时,我正在从字符串中删除控制字符。 我使用以下正则表达式执行此操作,这很好: \\p{C} 这个问题是文本的一部分,它的意思是要有新的行。因此,我需要做的是删除所有控制字符,除非它们介于和之间 如何使用正则表达式实现此操作?您可以使用 replaceAll("(?s)(<Text>.*?</Text>)|\\p{C}", "$1") replaceAll(“(?s)(*?)\\p{C},“$1”) 其思想是跳过文本标记内容,并将其放在一旁(用它

在加载和反序列化字符串时,我正在从字符串中删除控制字符。 我使用以下正则表达式执行此操作,这很好:

\\p{C}
这个问题是文本的一部分,它的意思是要有新的行。因此,我需要做的是删除所有控制字符,除非它们介于
之间

如何使用正则表达式实现此操作?

您可以使用

replaceAll("(?s)(<Text>.*?</Text>)|\\p{C}", "$1")
replaceAll(“(?s)(*?)\\p{C},“$1”)
其思想是跳过
文本
标记内容,并将其放在一旁(用它们自己替换)。因此,如果我们遇到一个
\\p{C}
,我们知道它不在其中

说明

  • (?s)
    激活“点匹配全部”,因此
    也将匹配换行符
  • (.*)
    捕获第一个组中的文本节点。我们通过
    $1
  • 如果我们匹配
    \\p{C}
    ,这意味着我们不在文本节点中。因此,我们将替换为
    $1
    ,它是空的,因为
    (.*)
    在替换中不匹配

Ideone插图:

您可以使用此正则表达式:

/(?!<text[^>]*?>)(\p{C}+)(?![^<]*?<\/text>)/gi

/(?!]*?>)(\p{C}+(![^这里有一个字符串,我必须测试删除控制字符的正则表达式模式

AAU?AASDSastW3H,kdf134dfswdesdfent?�sdfsadfa45678r?w3h、kdf134dfswdesdfawh、kdf134dfswdesdfsurew3h、kdf134dfswdesdfent??3asdfliit/123423defwecty?�STasd?Pawh,kdf134dfswdesdfks?Hw3rsdfsd134dfswdet

似乎正则表达式模式
“[:cntrl:][]”
运行良好。
string.replaceAll(“[\u0000-\u001f]”,“”)
只需替换其中的一部分即可。
“\p{Cntrl}”
只需在“wecty”之后替换空字符串即可

有人能告诉我这些控制字符是什么吗?我可以替换它们,但不知道它们是什么。 jave在线正则表达式测试显示有11个控制字符匹配。

不容易;你应该考虑一个更复杂的解决方案;我碰巧有,或者,你的输入似乎是XML,那么为什么不使用流式XML解析器API?作为一个可选的小调,<代码> [^ @ ZX81:我要链接到答案,然后我意识到你写了:我认为这是在删除控制字符和整个文本标记。我是否误解了您建议我如何使用它?@zx81:是的,但我不知道是否有其他标记嵌套在
一个标记中。@DavidKibblewhite您是否将其替换为
$1
?(单击“Java”->replaceAll部分)对我来说很好。