正则表达式停在此修复消息中的某个空格处

时间:2015-11-11 19:31:01

标签: regex

我尝试匹配以下文字中的字符串Please Trade this for me!

8=FIX.4.2 9=0302 35=D 49=THING_PLACE 56=NOUN_NOUN 34=6004 52=20151110-18:56:56 115=REDACTED::::::::::CENSORED 1=TestAccount 18320=19731199105 207=N 38=10000 40=2 11=Order5931 109=NORTH 47=A 44=117 15=USD 48=DIS.N 21=1 55=DIS 54=1 18315=EXT 59=0 58=Please Trade this for me! 14010=NORTH_AMERICA 60=20151110-18:56:55.214 10=250

我尝试使用此正则表达式但未成功:/[a-zA-Z0-9\=.\s\:\-\_\/!]*(\s58=[a-zA-Z0-9\=.\:\-\_\/!]*\s)[a-zA-Z0-9\=.\s\:\-\_\/!]*/

你可以看到它here。正如您所看到的那样,它最终选择的远远超过了所需的文本。此外,如果您选择不同的数值代替58,它也会这样做。

请记住,最后可能没有标点符号

2 个答案:

答案 0 :(得分:3)

尝试this(我假设您正在使用支持零长度前瞻和后视的正则表达式变体):

(?<=58\=).*?(?=\s*\d+\=)

<强>解释

  • (?<=58\=)这是零宽度正向后视,与58=

  • 末尾的边界相匹配
  • .*?这与任何角色的匹配程度最低。

  • (?=\s*\d+\=)这是零宽度正向前瞻,与14010=开头的边界相匹配。内部表达式匹配零个或多个空格(\s*)后跟一个或多个数字(\d+)和等号(\=

答案 1 :(得分:0)

试试这个:

\d{2,}\=([A-Za-z\s+!]{20,})\s+

https://regex101.com/r/fU9fY1/4