Как извлечь подстроку из строки с помощью регулярных выражений - PullRequest
0 голосов
/ 06 ноября 2018

код Я хочу регулярное выражение для этого формата и отфильтровать 123456, если соответствует текущему формату

PO # 123456
PO# 123456
PO #123456
P.O. # 123456
P.O.# 123456
P.O. #123456

Мы должны отфильтровать подстроку из поля string notes__c. мое регулярное выражение работает только для PO #123456 и P.O. #123456

    Matcher rm = r.matcher(oOrder.Notes__c);
    Pattern r = Pattern.compile('PO #(\\S+)\\s');
    if(rm.find()) {
    string res2 =  rm.group(1);
    oOrder.test__c = res2;
    }

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Попробуйте это:

.?(\d+)$

В приведенном вами примере это работает.

https://regex101.com/r/eTjbMo/1/

0 голосов
/ 06 ноября 2018

Над кодами не работают друзья

Я изменил мой код до

if(oOrder.Notes__c != null) {
        Pattern p = Pattern.compile('PO # (\\S+)\\s');
        Pattern q = Pattern.compile('PO# (\\S+)\\s');
        Pattern r = Pattern.compile('PO #(\\S+)\\s');
        Pattern s = Pattern.compile('P.O. # (\\S+)\\s');
        Pattern t = Pattern.compile('P.O.# (\\S+)\\s');
        Pattern u = Pattern.compile('P.O. #(\\S+)\\s');
        Matcher pm = p.matcher(oOrder.Notes__c);
        Matcher qm = q.matcher(oOrder.Notes__c);
        Matcher rm = r.matcher(oOrder.Notes__c);
        Matcher sm = s.matcher(oOrder.Notes__c);
        Matcher tm = t.matcher(oOrder.Notes__c);
        Matcher um = u.matcher(oOrder.Notes__c);

        system.debug('find = ' +pm.find()); 
        if (pm.find()){
          string res =  pm.group(1);
          oOrder.test__c = res;
        } 
        if(qm.find()){
          string res1 =  qm.group(1);
          oOrder.test__c = res1;
        }
        if(rm.find()){
          string res2 =  rm.group(1);
          oOrder.test__c = res2;
        }
        if(sm.find()){
          string res3 =  sm.group(1);
          oOrder.test__c = res3;
        }
        if(tm.find()){
          string res4 =  tm.group(1);
          oOrder.test__c = res4;
        }
        if(um.find()){
          string res5 =  um.group(1);
          oOrder.test__c = res5;
        }
      } 

покрывает все, кроме Первого PO # 123456

0 голосов
/ 06 ноября 2018

Ключевым моментом, на который следует обратить внимание, являются необязательные пробелы. Пробелы могут появляться до и / или после #. Всякий раз, когда вы видите шаблон, подобный этому, вам обычно требуется \s* (если вы разрешаете несколько пробелов) или \s? (если вы разрешаете только один или несколько пробелов).

Первая часть может быть PO или P.O.. Мы можем написать эти две альтернативы с помощью токена |. Не забудьте убежать от . s.

Все регулярное выражение выглядит так:

(?:PO|P\.O\.)\s*#\s*(\d+)

Здесь я предположил, что вы хотите захватить совпадения \d+. Если эта часть может содержать буквы, измените группу захвата соответственно.

Демо

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

(?:PO|P\\.O\\.)\\s*#\\s*(\\d+)
...