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部分)对我来说很好。