我有一个正则表达式,正确地从字符串的结果中捕获值。
正则表达式看起来像;
intGetHatSaatRenk_v22=anyType{SiraNo=(.*?); HatKodu=(.*?) ; GunTipi=(.*?); Gidis=(.*?); ? };
但问题是来源就像;
intGetHatSaatRenk_v22=anyType{SiraNo=54; HatKodu=502 ; GunTipi=C; Gidis=12:00; RenkGidis=0000FF; };
intGetHatSaatRenk_v22=anyType{SiraNo=55; HatKodu=502 ; GunTipi=C; Gidis=12:07; }; intGetHatSaatRenk_v22=anyType{SiraNo=56; HatKodu=502 ; GunTipi=C; Gidis=12:14; };
正如您所看到的那样,有一个名为 RenkGidis 的可选字段,如果它不是null,我如何从RenkGidis获取该值?
使用我上面写的正则表达式代码,如果RenkGidis存在于group(4)中,我可以得到 12:00; RenkGidis = 0000FF 但是组(4)必须只有 12:00 。
我希望我能解释一下我的问题。
答案 0 :(得分:1)
可能想要制作最后一组optional:
intGetHatSaatRenk_v22=anyType\{SiraNo=([^;\s]*);\s+HatKodu=([^;\s]*)\s*;\s+GunTipi=([^;\s]*);\s+Gidis=([^;\s]*);(?:\s+RenkGidis=([^;\s]*);)?
作为Java字符串:
"intGetHatSaatRenk_v22=anyType\\{SiraNo=([^;\\s]*);\\s+HatKodu=([^;\\s]*)\\s*;\\s+GunTipi=([^;\\s]*);\\s+Gidis=([^;\\s]*);(?:\\s+RenkGidis=([^;\\s]*);)?"
将最后一组(
?:
prevents the group to be captured输入到输出中。 (
内的)
像往常一样被捕。
同时将.*?
更改为[^;\s]*
(否定[;\s]
- >任何字符,即无空格或;
)
正如Alan在评论中提到的那样,没有获得可选部分的null
匹配,例如只需使RenkGidis
成为可选项,然后将该值换成任意内容:([^;\s]*;|)
intGetHatSaatRenk_v22=anyType\{SiraNo=([^;\s]*);\s+HatKodu=([^;\s]*)\s*;\s+GunTipi=([^;\s]*);\s+Gidis=([^;\s]*);(?:\s+RenkGidis=)?([^;\s]*|)
作为Java字符串:
"intGetHatSaatRenk_v22=anyType\\{SiraNo=([^;\\s]*);\\s+HatKodu=([^;\\s]*)\\s*;\\s+GunTipi=([^;\\s]*);\\s+Gidis=([^;\\s]*);(?:\\s+RenkGidis=)?([^;\\s]*|)"
答案 1 :(得分:0)
正则表达式看起来像这样
intGetHatSaatRenk_v22=anyType\{SiraNo=(.*?); HatKodu=(.*?) ; GunTipi=(.*?); Gidis=(.*?);( RenkGidis=.*?;\s*|\s*)\};
第5组将是“RenkGidis = 0000FF;”要么 ” ”。然后,您可以使用第二个正则表达式获得0000FF。