代码 我想要此格式的正则表达式,如果与当前格式匹配,则过滤掉123456
PO # 123456
PO# 123456
PO #123456
P.O. # 123456
P.O.# 123456
P.O. #123456
我们必须从字符串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;
}
答案 0 :(得分:0)
这里要注意的关键是可选的空格。空格可以出现在#
之前和/或之后。每当您看到这样的模式时,通常都需要\s*
(如果允许多个空格)或\s?
(如果仅允许一个或多个空格)。
第一部分可以是PO
或P.O.
。我们可以使用|
令牌编写这两种选择。请记住不要使用.
。
整个正则表达式如下:
(?:PO|P\.O\.)\s*#\s*(\d+)
在这里,我假设您要捕获的东西与\d+
相匹配。如果该部分可以包含字母,请相应地更改捕获组。
要将正则表达式写为字符串文字,您需要转义反斜杠:
(?:PO|P\\.O\\.)\\s*#\\s*(\\d+)
答案 1 :(得分:0)
答案 2 :(得分:0)
以上代码不是工作伙伴
我已将我的代码修改为
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