我有一个FileInputStream,它读取的文件某处包含一个字符串子集,如下所示:
...
OperatorSpecific(XXX)
{
Customer(someContent)
SaveImage()
{
...
我想识别字符串的Customer(someContent)
部分,并将括号内的someContent切换为其他内容。
someContent将是一个动态参数,将包含一个可能包含5-10个字符的字符串。
我之前使用过regEx,比如一次或两次,但我觉得在这样的上下文中,我不知道括号内会有什么价值,我不知道应该如何表达它。 ..
总之,我希望有一个返回给我的字符串,它在Customer-parenthesis中有myContent值。
有没有人对如何完成这项工作有任何明智的想法?
答案 0 :(得分:1)
试试这个(在java中使用转义反斜杠的两倍!)
(?<=Customer\()[^\)]*
并替换您的内容。
(?<=Customer\()
看起来是断言。它检查每个位置是否有“客户(”左侧,如果是,它匹配右侧所有非“a”的字符“)与[^\)]*
,则这是将被替换的部分
一些有效的java代码
Pattern p = Pattern.compile("(?<=Customer\\()[^\\)]*");
String original = "Customer(someContent)";
String Replacement = "NewContent";
Matcher m = p.matcher(original);
String result = m.replaceAll(Replacement);
System.out.println(result);
这将打印
客户(NewContent)
答案 1 :(得分:0)
未经测试,但以下内容应该有效:
Pattern pattern = Pattern.compile("\\s+Customer\\(\\s*(\\w+)\\s*\\)\\s*");
Matcher matcher = pattern.matcher(input);
matcher.matches();
System.out.println(matcher.group(1));
修改强>
这当然不适用于所有可能的情况:
// legal variable names
Customer(_someContent)
Customer($some_Content)
答案 2 :(得分:0)
使用群组作品和非贪婪作品:
String s =
"OperatorSpecific(XXX)\n {\n" +
" Customer(someContent)\n" +
" SaveImage() {";
Pattern p = Pattern.compile("Customer\\((.*?)\\)");
Matcher matcher = p.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
将打印
someContent