正则命名捕获组结果排除指定前缀字符串的实现方案
修改正则以仅捕获at/stop/risk后的数值部分
原正则表达式可正常匹配指定交易指令格式,但at、stop、risk三个可选捕获组会包含前缀字符串(如捕获stop 3000而非仅3000)。以下是调整后的正则,可直接提取这些字段的数值部分:
^(?<side>(?:buy|sell)\s)(?<symbol>[A-Za-z0-9]+\s)(?:at\s(?P<at>[A-Za-z0-9.]+)\s)?(?:stop\s(?P<stop>[A-Za-z0-9.]+)\s)?(?:risk\s(?P<risk>[A-Za-z0-9.]+))?$
关键改动说明:
- 将每个前缀(
at、stop、risk)放入非捕获组(?:...)中,仅把后面的数值部分作为命名捕获组的内容,确保捕获组只提取前缀后的数值,不包含前缀字符串。 - 调整
risk组的末尾空格处理,避免因多余空格导致匹配失败。
匹配验证:
- 输入
buy US500:side为buy,symbol为US500,at/stop/risk均为空 - 输入
buy US500 at 4000:at捕获值为4000 - 输入
buy US500 at 4000 stop 3000:at为4000,stop为3000 - 输入
buy US500 at 4000 stop 3000 risk 400:at为4000,stop为3000,risk为400
内容的提问来源于stack exchange,提问作者MrCoinSiX
相关产品推荐
相关产品推荐

