正则表达式,用字符串附加一个find

时间:2014-11-23 13:29:50

标签: regex excel

我正在尝试将工作表名称添加到excel公式中没有工作表名称的单元格中。 例如curr_sheet上的公式:
'other_sheet'!$ B $ 2 + A1
应成为:
'other_sheet'!$ B $ 2 +'curr_sheet'!A1

public static Void addSheetNameToCells(String formula, String sheetName) {
    String noSheetNameBeforeCellRegex = 
            "('[A-Za-z0-9-_]+'!)?[$]?[A-Z]{1,3}[$]?[0-9]+";
    System.out.println("qwerty-"+formula.replaceAll
            (noSheetNameBeforeCellRegex, "'"+sheetNmame+"'!$0"));
}

上面的代码告诉我:
'curr_sheet'!'other_sheet'!$ B $ 2 +'curr_sheet'!A1
我认为解决方案是回溯,我试过(?<!('!))[$]?[A-Z]{1,3}[$]?[0-9]+但它与** $ ** B $ 2中的$符号冲突并且给了我这个:
'other_sheet'!$'curr_sheet'!B $ 2 +'curr_sheet'!A1
有解决方案吗?

2 个答案:

答案 0 :(得分:1)

接受@alessandroasm的建议,他的解决方案中的一个小改动似乎适用于所有场景 - (?<!'!)((?<![A-Z])[A-Z]{1,3}[0-9]+|\$[A-Z]{1,3}\$[0-9]+)

答案 1 :(得分:0)

以下表达式将匹配格式为A1或$ A $ 1的单元格,而不是&#39;

(?<!'!)([A-Z]{1,3}[0-9]+|\$[A-Z]{1,3}\$[0-9]+)

http://regex101.com/r/yO8rW1/2