【问题标题】:Java RegEx string excluding specific wordJava RegEx 字符串不包括特定单词
【发布时间】:2013-07-27 23:09:55
【问题描述】:

UpperCaseConverter 类将输入文本转换为大写文本,不包括与正则表达式 "(?i)^((?!sht).)*" 匹配的单词。

我期望得到的是 1A0A-50-CRD-140-20002-063484C-N-01_Sht_1A.pdf 但结果是 1A0A-50-CRD-140-20002-063484C-N-01_Sht_1a.pdf

字母的最后一部分怎么可能是大写除了.pdf

大写转换器

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UpperCaseConverter {

    private UpperCaseConverter(){};

    public static String convert(String text, String regEx) {
        StringBuilder toBeConverted = new StringBuilder(text);

        Pattern pattern = Pattern.compile(regEx);
        Matcher matcher = pattern.matcher(toBeConverted);

        while(matcher.find()) {
            String buf = toBeConverted.substring(matcher.start(), matcher.end()).toUpperCase();
            toBeConverted.replace(matcher.start(), matcher.end(), buf);
        }

        return toBeConverted.toString();
    }
}

*测试用例

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

public class UpperCaseConverterTest {

    @Test
    public void testUpperCase() {
        String expect = UpperCaseConverter.convert("1a0A-50-CRD-140-20002-063484C-N-01_Sht_1a.pdf", 
                "(?i)^((?!sht).)*");
        assertEquals("1A0A-50-CRD-140-20002-063484C-N-01_Sht_1A.pdf", expect);
    }
}

【问题讨论】:

  • 什么是UpperCaseConverter
  • 如果不向我们展示任何代码,除了猜测之外别无他法。您是否尝试将其关闭然后再打开?
  • 它是我制作的一个类,用于将小写文本转换为大写,不包括与提供的 RegEx 匹配的单词。
  • @JakeJeon Matcher.appendReplacement 后跟 Matcher.appendTail 有什么问题。

标签: java regex


【解决方案1】:

根据您的指示,您的正则表达式在“sht”最后一次出现之前停止。只有正则表达式部分得到大写处理。

【讨论】:

  • 你必须澄清这个正则表达式的目的。事实上,它完全按照您自己的规范“将输入文本转换为大写文本,不包括匹配的单词”。
猜你喜欢
  • 2022-11-19
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2010-11-22
  • 2012-07-24
  • 2012-12-11
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多