Java正则表达式问题:如何匹配第N个字段的字符串



我正在尝试检查第15个字段(由|分隔的字段(,看看值是否为"RAV"。样品线在这里

'8/23/2022 7:35:08 AM|33224455|DF My-Store|ABCD-OY-MMNNYYDD|98121928|DF|FNU LNU|1234 ISLAND COVE CT|DELTA LAKE|CT|98765-8470||73023|MIS|MIS VAR DISPLAY|RAV||MYDF'

我使用的Regex公式是

(^([^|]*|){15}K[^|]*$)|(([RAV]){3})

它检测到";RAV";在第17场。但是如果字符串";RAV";在第二场或第三场或15场之前或之后的任何其他场中,我也得到了模式匹配,这不是我所期望的。我需要严格匹配第15场,而不是在比赛之前或之后。

我该怎么做?我在这里犯了什么错误?请告诉我。感谢

您可以使用此正则表达式仅在16th字段中匹配RAV。如果RAV出现在之前或之后的任何其他字段中,则将导致匹配失败。

^(?:(?!RAV|)[^|]*|){15}KRAV(?!.*|RAV(?:||$))(?=||$)

RegEx演示

btwK在Java中不受支持,仅在PCRE风格中受支持。

如果你想在Java中使用这个正则表达式,那么使用一个捕获组:

^(?:(?!RAV|)[^|]*|){15}(RAV)(?!.*|RAV(?:||$))(?=||$)

最新更新