如何扩展Java正则表达式提取字符串中的num与game_name
解决方案
要同时提取num和game_name,你需要调整正则表达式,让它能匹配两种不同的模式:直接在{}内的变量,以及嵌套在{}里[]中的变量。
适用的正则表达式
\{(?:([^}\[\]]+)|[^\]]+\[([^\]]+)\])\}
正则说明
\{:匹配开头的左大括号(?:...):非捕获组,用来包含两种匹配分支:([^}\[\]]+):捕获{}内不包含[、]、}的内容,对应{num}里的num|:逻辑或,切换到第二种匹配分支[^\]]+\[([^\]]+)\]:先匹配到[之前的任意非]字符,再捕获[]之间的内容,对应[game_name]里的game_name
\}:匹配结尾的右大括号
示例用法(Python)
import re text = "There are {num} scores {/game/[game_name]/game_in}" pattern = r"\{(?:([^}\[\]]+)|[^\]]+\[([^\]]+)\])\}" matches = re.findall(pattern, text) # 收集所有非空的捕获结果 extracted = [val for pair in matches for val in pair if val] print(extracted) # 输出: ['num', 'game_name']
这个正则会找到所有符合两种模式的内容,最终你可以从捕获分组中提取出目标变量。
内容的提问来源于stack exchange,提问作者Ishan Sharma
相关产品推荐
相关产品推荐

