【问题标题】:Java Regex to remove start/end single quotes but leave inside quotesJava Regex 删除开始/结束单引号但保留在引号内
【发布时间】:2011-03-19 21:46:18
【问题描述】:

我有来自用单引号括起来的 CSV 文件的数据,例如:

'Company name'
'Price: $43.50'
'New York, New York'

我希望能够替换值的开头/结尾处的单引号,但在数据中保留引号,例如:

'Joe's Diner'  should become Joe's Diner

我可以的

updateString = theString.replace("^'", "").replace("'$", "");

但我想知道我是否可以将它组合起来只做一次替换。

【问题讨论】:

  • 您想允许不平衡的引号使用引号来转义单元格中的逗号?不可能同时做到这两点。
  • 是的,你可以很容易地组合它们。再看看@Josiah 的回答,现在他使用了正确的方法。

标签: java regex csv replace


【解决方案1】:

您可以使用 运算符。

updateString = theString.replaceAll("(^')|('$)","");

看看这是否适合你:)

【讨论】:

  • 我不得不将其更改为 replaceAll,但后来它起作用了。如果你更新你的答案,我会接受它
  • 我需要与此相反。我想将此 //*[@text='some'Text'] 转换为 //*[@text='some\'Text']
【解决方案2】:
updateString = theString.replaceFirst("^'(.*)'$", "$1");

请注意,您没有的表单将不起作用,因为 replace 使用文字字符串,而不是正则表达式。

这通过使用捕获组(.*) 起作用,在替换文本中用$1 引用。您还可以执行以下操作:

Pattern patt = Pattern.compile("^'(.*)'$"); // could be stored in a static final field.
Matcher matcher = patt.matcher(theString);
boolean matches = matcher.matches();
updateString = matcher.group(1);

当然,如果您确定开头和结尾都有单引号,最简单的解决方案是:

updateString = theString.substring(1, theString.length() - 1);

【讨论】:

    猜你喜欢
    • 2016-09-27
    • 2015-03-02
    • 1970-01-01
    • 2021-08-28
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多