2010-07-23 66 views
7

我有一个CSV文件,该文件是在单引号,像数据:Java的正则表达式来删除开始/结束单引号,但留下引号内

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

我希望能够在更换单引号值的开始/结束,但留下的报价数据,如:

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

我可以做

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

但我想知道我是否可以结合它只做一个替换。

+0

要允许不平衡报价*和*使用引号来转义单元格内的逗号?这是不可能一次完成的。 – finnw 2010-07-23 17:36:51

+0

是的,你可以很容易地结合起来。再看一下@ Josiah的回答,现在他正在使用正确的方法。 – 2010-07-23 22:07:19

回答

16

您可以使用运算符。

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

看看是否能为你工作:)

+0

我必须将其更改为全部替换,但之后它才起作用。如果你更新你的答案,我会接受它 – George 2010-07-23 03:26:33

+0

很高兴有帮助:) – Josiah 2010-07-23 16:27:03

+0

我需要与此相反。我想将此 // * [@ text ='some'Text'] 转换为// * [@ text ='some \'Text'] – vaibhavcool20 2017-06-19 14:12:44

1
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); 
相关问题