Java Regex 删除开始/结束单引号但保留在引号内

Posted

技术标签:

【中文标题】Java Regex 删除开始/结束单引号但保留在引号内【英文标题】:Java Regex to remove start/end single quotes but leave inside quotes 【发布时间】: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 的回答,现在他使用了正确的方法。 【参考方案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);

【讨论】:

以上是关于Java Regex 删除开始/结束单引号但保留在引号内的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题 Java 实现去除多余空格2022.11 Q4 新题

Postgresql regex_replace 逗号,单引号和双引号

Java Regex 用于将带引号的字符串与转义引号匹配

Python替换引号内的',',但保留其他逗号,然后删除字符串中的引号

JSON删除空格和回车,但保留引号中的空格

华为OD机试真题Java实现去除多余空格真题+解题思路+代码(2022&2023)