子字符串格式
PO # 123456
PO# 123456
PO #123456
P.O. # 123456
P.O.# 123456
P.O. #123456
我们必须从字符串notes__c字段中过滤子字符串(123456)并将其放在test__c字段中。我用过Regex来触发,它涵盖了除第一个PO#123456之外的所有内容
我的密码
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;
}
}
如果还有其他方法(例如字符串方法) 请建议
答案 0 :(得分:0)
您可以使用单个正则表达式来捕获组中的数字:
(?<!\\S)P(?:O|\\.O\\.)\\h*#\\h*(\\d+)
说明
(?<!\S)
后面的否定断言断言左侧不是非空白字符P
字面上匹配(?:O|\.O\.)
匹配O或.O。\h*
与水平空白匹配零次或多次#
字面上匹配\h*
匹配零个或多个水平空白(\d+)
分组捕获1位以上的数字