【问题标题】:Regex to split a string based on \r characters not a carriage return or a new line正则表达式基于 \r 字符而不是回车符或换行符拆分字符串
【发布时间】:2021-06-24 17:24:24
【问题描述】:

我想要一个正则表达式根据\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

【问题讨论】:

  • 非常感谢您的工作
  • 如果我的回答没有解决您的问题,请考虑更新问题。

标签: java regex string apache-stringutils


【解决方案1】:

你可以使用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]

【讨论】:

  • 不,它认为 \r 是回车而不是字符串“\r”
【解决方案2】:

你可以使用

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

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

【讨论】:

    【解决方案3】:

    被调用的方法匹配分隔符字符串中的任何一个内容作为分隔符,而不是整个序列。下面是 SeparatorUtils 中执行分隔符(str 是被拆分的输入字符串)检查的代码:

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-20
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2011-12-10
      相关资源
      最近更新 更多