如何用RegEx检测货币子串在指定位置恰好出现两次?
正则表达式解决方案
直接给你能精准满足需求的正则:
^IR!(GBP|USD)!INDEX.\1$
新手友好的逐段拆解
^:锁定字符串开头,确保整个内容必须从IR!开始,不能有多余前置字符;IR!:固定匹配你说的首段内容,完全对应结构要求;(GBP|USD):这是「捕获组」,专门抓取第二段的货币代码——只能是GBP或USD,抓取后会临时存储这个值;!INDEX.:匹配第二段和第三段之间的分隔符!,再匹配固定的INDEX.前缀;\1:引用刚才捕获组存的货币代码,意思是INDEX.后面必须跟和第二段完全一样的货币,保证该货币恰好出现两次;$:锁定字符串结尾,确保INDEX.货币之后没有多余内容。
自动过滤无效情况的原因
IR!GBP!COUNTERPARTY.USD:第三段开头不是INDEX.,正则里的INDEX.匹配不上,直接排除;IR!USD!INDEX.GBP:捕获组抓的是USD,但\1要求INDEX.后必须是USD,实际是GBP,不匹配,排除。
匹配的有效示例
IR!GBP!INDEX.GBP:第二段是GBP,INDEX.后也是GBP,完全符合“同一货币恰好出现两次且第二次在INDEX.后”的要求;IR!USD!INDEX.USD:第二段是USD,INDEX.后也是USD,同样符合要求。
注:你提到的
IR!GBP!INDEX.USD示例中,GBP和USD各出现一次,没有任何货币满足“恰好出现两次”的条件,所以按照你的需求描述,这个情况其实不应匹配。如果确实需要匹配这类场景,可能需要调整需求表述。
内容的提问来源于stack exchange,提问作者andreasagninese
相关产品推荐
相关产品推荐

