Регулярное выражение, чтобы найти все символы, но после чисел - PullRequest
1 голос
/ 21 февраля 2012

Я плохо разбираюсь в регулярных выражениях, но я изо всех сил пытаюсь найти способ изменить регистр букв строки с нижнего на прописной в java

В Java есть очень хороший метод toUpperCase (), однако это не очень помогает по двум причинам.

Во-первых, я хотел бы получить ссылку на такое регулярное выражение, поскольку я нигде не мог его найти, и Во-вторых, потому что это изменит регистр всех символов.

Однако есть случаи, когда я хотел бы сохранить более низкий символ, чтобы избежать путаницы, и чтобы он выглядел лучше.

Good   Bad
2i   =  2I
2o   =  2O
1st  = 1ST
2nd  = 2ND
etc...

Можно ли добавить условия? например

"don't replace if the sequence 'st' appears after the number '1' even if there is a space between"
"don't replace if the sequence 'nd' appears after the number '2' even if there is a space between"
etc...

Мне было интересно, может ли кто-нибудь помочь мне сгенерировать регулярное выражение для выбора этих символов

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

посмотрите, если это то, что вам нужно:

final String[] s = { "2 nd blah", 
                "1st foo", 
                "foo 2nd bar", 
                "blahblah1stfounditimmediately", 
                "blah 3rd foo", 
                "blah55th foo", 
                "66 th bar"
                 };
        final Pattern p = Pattern.compile("(1 ?ST|2 ?ND|3 ?RD|\\d+ ?TH)");
        Matcher m = null;
        String t;
        for (final String x : s) {
            t = x.toUpperCase();
            m = p.matcher(t);
            while (m.find()) {
                System.out.println(x + " ---> " + t.replaceAll(m.group(1), m.group(1).toLowerCase()));
            }
        }

вывод вышеуказанных кодов:

2 nd blah ---> 2 nd BLAH
1st foo ---> 1st FOO
foo 2nd bar ---> FOO 2nd BAR
blahblah1stfounditimmediately ---> BLAHBLAH1stFOUNDITIMMEDIATELY
blah 3rd foo ---> BLAH 3rd FOO
blah55th foo ---> BLAH55th FOO
66 th bar ---> 66 th BAR

РЕДАКТИРОВАТЬ для лучшего формата кода.

0 голосов
/ 21 февраля 2012

как насчет этого?

var str = '2 nd';

if (!/\d+(\s*)(nd|st)/i.test(str)) {
    str = String(str).toUpperCase();
}​​​​​​​​​​

console.log(str);

1004 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...