正则表达式根据 \r 字符而不是回车符或换行符拆分字符串

问题描述

我想要一个正则表达式根据 \r 字符而不是回车符或换行符来拆分字符串。

下面是我的示例字符串。

MSH|^~\&|1100|CB|CERASP|TESTSB8F|202008041554||ORU|1361|P|2.2\rPID|1|833944|21796920320|8276975

我想把它分成

MSH|^~\&|1100|CB|CERASP|TESTSB8F|202008041554||ORU|1361|P|2.2
PID|1|833944|21796920320|8276975

目前我有这样的东西

StringUtils.split(testStr,"\\r");

但它正在分裂成

MSH|^~
&|1100|CB|CERASP|TESTSB8F|202008041554||ORU|1361|P|2.2
PID|1|833944|21796920320|8276975

解决方法

您可以只使用 String#split

final String str = "MSH|^~\\&|1100|CB|CERASP|TESTSB8F|202008041554||ORU|1361|P|2.2\\rPID|1|833944|21796920320|8276975";
        
final String[] substrs = str.split("\\\\r");
System.out.println(Arrays.toString(substrs));
// Outputs [MSH|^~\&|1100|CB|CERASP|TESTSB8F|202008041554||ORU|1361|P|2.2,PID|1|833944|21796920320|8276975]
,

你可以使用

import java.utl.regex.*;
//...
String[] results = text.split(Pattern.quote("\\r"));

Pattern.quote 允许在 String.split 中使用任何接受有效正则表达式的纯文本。此处,\ 是一个特殊字符,需要为 Java 字符串解释引擎和正则表达式引擎进行转义。

,

被调用的方法匹配定界符字符串中的任何一项内容作为定界符,而不是整个序列。这是来自 SeparatorUtils 的代码,它执行分隔符(str 是被分割的输入字符串)检查:

if (separatorChars.indexOf(str.charAt(i)) >= 0) {

正如@enzo 提到的,java.lang.String.split() 将完成这项工作 - 只需确保引用分隔符即可。 Pattern.quote() 可以提供帮助。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...