如何清理字符串并仅留下第一个分号

时间:2017-11-21 16:31:03

标签: java regex csv

我在CSV文件中有这种列表:

MaxLength

我的目标是清理这些字符串,只保留第一个分号:

TextBox

我试着这样做:

    4231;"Swiss Federal Railways (SBB; CFF; FFS)"
    67;"Hershey Co; The"

但这还不够。

编辑: 更清楚的是,这是我使用的代码:

4231; Swiss Federal Railways (SBB CFF FFS)
67; Hershey Co The

3 个答案:

答案 0 :(得分:2)

在java中,您可以使用split()函数:每次找到模式时,它都会将字符串分解为数组。 在你的情况下:

    String source = "4231;\"Swiss Federal Railways (SBB; CFF; FFS)\"";
    String parts[] = source.split(";");
    String fullString = "";
    for (int i = 0; i < parts.length; i++)
        if (i != 0) fullString = fullString + parts[i];
    fullString = parts[0] + ";" + fullString;

然后根据需要构建最终字符串

答案 1 :(得分:2)

代码

爪哇

See regex in use here

((?:^[^;\v]*;|\G(?!\A))[^;\v]*);

替换

$1

其他语言(即PCRE)

在其他正则表达式中,您可以使用以下正则表达式,但Java不支持令牌\K(重置报告的匹配的起点 - 任何以前消耗的字符不再包含在决赛)。这将使用替换空字符串而不是捕获组。

(?:^[^;\v]*;|\G(?!\A))[^;\v]*\K;

用法

See code in use here

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "((?:^[^;\\v]*;|\\G(?!\\A))[^;\\v]*);";
final String string = "    4231;\"Swiss Federal Railways (SBB; CFF; FFS)\"\n"
     + "    67;\"Hershey Co; The\"";
final String subst = "$1";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);

结果

输入

     4231;"Swiss Federal Railways (SBB; CFF; FFS)"
     67;"Hershey Co; The"

输出

     4231;"Swiss Federal Railways (SBB CFF FFS)"
     67;"Hershey Co The"

说明

  • ((?:^[^;\v]*;|\G(?!\A))[^;\v]*)将以下内容捕获到捕获组1中
    • (?:^[^;\v]*;|\G(?!\A))匹配以下任一项
      • ^[^;\v]*;
        • ^在行首处断言位置
        • [^;\v]*匹配集合中不存在的任何数字(除分号;或垂直空格外的任何字符)
        • ;按字面意思
        • 匹配分号字符;
      • \G(?!\A)在上一场比赛结束时断言位置
    • [^;\v]*匹配集合中不存在的任何数字(除分号;或垂直空格外的任何字符)
  • ;按字面意思
  • 匹配分号字符;

答案 2 :(得分:0)

你可以替换第一次出现的;使用临时字符串,进行更改,并将临时部分还原为分号。

String s = "4231;\"Swiss Federal Railways (SBB; CFF; FFS)\"";
s = s.replaceFirst(";", "~~~").replaceAll(";", "").replaceAll("\"", "").replaceFirst("~~~", "; ");
System.out.println(s);

输出:

4231; Swiss Federal Railways (SBB CFF FFS)