2016-09-19 60 views
0

我试图找到并使用Java替换文件中,但无法得到解决。Java的正则表达式为“双引号和'空间

文件内容

‘产品代码’=” 8 :{3E3CDCB6-286C-4B7F-BCA6-D347A4AE37F5}”

“产品代码”= “8:.NETFramework,版本= 4.5版”

我要更新第一个的GUID这是3E3CDCB6-286C-4B7F-BCA6-D347A4AE37F5

String line = "\"ProductCode\" = \"8:{3E3CDCB6-286C-4B7F-BCA6-D347A4AE37F5}\""; 
String pattern = "[\"]([P][r][o][d][u][c][t][C][o][d][e]).+([\"])(\\s)[\"][8][:][{]"; 
Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(line); 
System.out.println(m.matches()); 

我越来越假。

请尽可能提供解决方案。

在此先感谢。

+0

在你应用了一些正则表达式之后,你的'ProductCode'的实际期望输出是多少? –

+0

'Matcher.matches()'应该匹配整个字符串。如果你不想检查部分匹配,使用'find()'。 – Codebender

+1

用方括号中的单个字母构造是多余的。你可以简单地使用'ProductCode'来代替'[P] [r] [o] [d] [u] [c] [t] [C] [o] [d] [e]''。尝试简化你的正则表达式。 – RealSkeptic

回答

1

“产品代码”= “8:{3E3CDCB6-286C-4B7F-BCA6-D347A4AE37F5}”这是以下形式:

quote + ProductCode + quote + whitespace + equals + whitespace + 
quote + number + colon + any + quote 

对于一个简单的正则表达式是\"ProductCode\"\s*=\s*\"\d:(.+)\"

当我们逃离这个以Java字符串,我们得到\\\"ProductCode\\\"\\s*=\\s*\\\"\\d:(.+)\\\"

+0

Thanks flkes, “\\\”ProductCode \\\“\\ s * = \\ s * \\\”\\ d:\\ {(。+)\\\“”我加了一个\\从第一产品代码区分为另一个产品代码。 再次感谢。 –

1

对这个问题使用正则表达式就像拿大锤打破坚果。相当简单:

final String line = "\"ProductCode\" = \"8:{3E3CDCB6-286C-4B7F-BCA6-D347A4AE37F5}\""; 

final String prefix = "\"ProductCode\" = \"8:{"; 
final int prefixIndex = line.indexOf(prefix); 

final String suffix = "}\""; 
final int suffixIndex = line.indexOf(suffix); 

final String guid = line.substring(prefixIndex + prefix.length(), suffixIndex); 
+0

我认为这是一个正则表达式的有效用例。 – flakes

+1

这不是问题 - 如果一个正则表达式起作用,这是一个有效的用例。但是在有人太在意是否可以或不可能的情况下,应该问一个问题是否应该关注问题的复杂性及其解决方案。 – Smutje

+0

但是,我同意你的看法,但在这个特定场景中,我认为使用Regex是一个更简单(更安全)的解决方案。如果平等之间并不总是空白呢?如果某些条目以'7:{'而不是'8:{'?这些问题正是Regex擅长解决的问题;试图为这些场景调整这些代码将会使这个解决方案远比需要更复杂。 – flakes

1

尝试这种模式:

String pattern = "^\\\"(ProductCode)\\\"\\s\\=\\s\\\"\\w\\:\\{(\\w+\\-*\\w+\\-\\w+\\-\\w+\\-\\w+)\\}\\\"$"; 
相关问题