获取一组定界符之间的文本

时间:2019-04-09 19:49:18

标签: regex

我有一串带有四个定界符ST: SI: T:I:的文本字符串,后跟一个数字和数字序列。我需要将定界符作为一个名为group的组,并将数字和数字作为code

ST:12YEOR48000FCT:24YEOR48000FCSI:12YEOR13000FCI:12YEOR13000FCT:12YEOR51200FCI:12YEOR14500FCST:12YEOR48000FCT:24YEOR48000FCSI:12YEOR13000FCI:12YEOR13000FCT:12ACTYEI:12ACTYET:32000ACTFCI:13300ACTFC

结果应为

GROUP CODE
ST:   12YEOR48000FC
T:    24YEOR48000FC
SI:   12YEOR13000F
CI:   12YEOR13000F
CT:   12YEOR51200F
CI:   12YEOR14500FC
ST:   12YEOR48000F
CT:   24YEOR48000FC
SI:   12YEOR13000F
CI:   12YEOR13000F
CT:   12ACTYE
I:    12ACTYE
T:    32000ACTFC
I:    13300ACTFC

(?'group'ST:|SI:|T:|I:)(?'code'.*?)(?<=ST:|SI:|T:|I:|$)

我的想法是,我想将开始的分隔符作为组,然后将任何字符作为代码,直到找到另一个分隔符或字符串结尾。我想出的正则表达式获取分隔符,但不获取代码。

感谢您的帮助。

RegEx101

1 个答案:

答案 0 :(得分:1)

您正在为code组使用正向后缀,这将无法完成您正在寻找的功能。

但是,您的方向正确!删除<以创建正面外观 将实现您所需要的:

(?'group'ST:|SI:|T:|I:)(?'code'.*?)(?=ST:|SI:|T:|I:|$)

Regex101

您还应该考虑通过使用嵌套的匹配组来为您的group项中的每个冒号标记来优化模式的可维护性。这样一来,以后添加group代码会变得更加容易,并限制了输入错误的可能性(例如,在新的group代码中忘记了冒号)

(?'group'(?:ST|SI|T|I):)(?'code'.*?)(?=(?:ST|SI|T|I):|$)

Regex101