Chr*_*ard 2 c# regex lookahead negative-lookahead
Medicare资格EDI示例回应是我想要匹配的.
我有一个看起来像这样的字符串:
LN:SMITHbbbbbbbbFN:SAMANTHAbbBD:19400515PD:1BN:123456PN:9876543210GP:ABCDEFGHIJKLMNOID:123456789012345bbbbbPC:123PH:8005551212CD:123456PB:123ED:20060101TD:2070101LC:NFI:12345678FE:20070101FT:20080101
我需要一组看起来像这样的匹配:
Key | Value ------------------- LN | SMITHbbbbbbbb FN | SAMANTHAbb BD | 19400515 ... etc
我整天都在处理这个问题,而且似乎无法获得可接受的匹配方案.我打算用for循环编程它,如果我想不出来就找到冒号的索引.
我尝试过使用负向前瞻,但我没有到达任何地方.这是C#,我正在测试时使用这个测试器(.Net)和The Regex Coach(非.Net).
我试过用这个:
([\w]{2})\:(?![\w]{2}\:)
Run Code Online (Sandbox Code Playgroud)
但这只匹配键和它们的冒号,如"LN:","FN:"等.
如果我使用:
([\w]{2})\:(.+?)([\w]{2})\:
Run Code Online (Sandbox Code Playgroud)
它也消耗下一个匹配的两个字符键和冒号,导致我只匹配每个其他键/值对.
有没有办法让我在.Net中使用RegEx正确匹配这些,或者我是否坚持使用更程序化的解决方案?请记住,我不能认为键总是大写字母.它们可能包含数字,但它们总是两个字符,然后是冒号.
提前感谢您提供的任何帮助.
我认为你想要的是积极的前瞻,而不是消极的,所以你可以在当前位置之前找到关键冒号组合,但你不会消耗它.这似乎适用于您的测试示例:
([\w]{2})\:(.+?)(?=[\w]{2}\:|$)
Run Code Online (Sandbox Code Playgroud)
产量:
LN: SMITHbbbbbbbb FN: SAMANTHAbb BD: 19400515 PD: 1 BN: 123456 PN: 9876543210 ...
注意:我在测试输出中添加了冒号,它们不会被正则表达式捕获.
编辑:谢谢,道格拉斯,我已经编辑了正则表达式以捕获字符串结尾,因此也捕获了最后一个条目.