如何用正则表达式提取文本中code与accountId的对应值?
正则提取code和accountId值的解决方案
原正则的问题分析
你的正则存在几个关键问题:
- 语法错误:包含错误的转义(如
'\(')和多余括号,导致正则无法正常解析 - 匹配范围过窄:code的值包含连字符
-,但原正则仅匹配小写字母和数字;accountId是多位数字,原正则([0-9])仅能匹配单个数字 - 未处理字段间内容:直接将
code:...与accountId:...硬连接,无法匹配两者之间的任意文本
正确的正则方案
方案1:一次性捕获两个目标值
利用非贪婪匹配同时提取两个字段,正则表达式如下:
code:\s*'([^']+)'.*?accountId:\s*'([^']+)'
各部分说明:
code:\s*':匹配code:,允许后跟任意数量空白字符(空格、制表符等),再匹配单引号([^']+):捕获单引号内所有非单引号字符,能适配包含连字符、字母、数字的code值.*?:非贪婪模式匹配中间任意文本,避免跳过目标accountId字段accountId:\s*'([^']+)':同理捕获accountId对应的数字值
方案2:分别提取单个字段
若无需同时捕获,可使用两个独立正则分别提取:
- 提取code值:
code:\s*'([^']+)'
- 提取accountId值:
accountId:\s*'([^']+)'
示例用法(Python)
import re text = "code: 'dev-foo-1', text: foo, bla:, blabla, ..., tokenId: '1234566343434', accountId: '123456789',..." # 一次性提取 match = re.search(r"code:\s*'([^']+)'.*?accountId:\s*'([^']+)'", text) if match: code = match.group(1) account_id = match.group(2) print(f"code: {code}, accountId: {account_id}") # 分别提取 code_match = re.search(r"code:\s*'([^']+)'", text) account_match = re.search(r"accountId:\s*'([^']+)'", text) if code_match: print(f"code: {code_match.group(1)}") if account_match: print(f"accountId: {account_match.group(1)}")
内容的提问来源于stack exchange,提问作者pralxx
相关产品推荐
相关产品推荐

