如何在Julia中编写包含加号(+)的正则表达式?
解决正则表达式匹配带加号的科学计数法问题
问题分析
你的原正则表达式字符类[A-Z0-9.-]+没有包含加号+,导致无法匹配带E+的科学计数法片段。另外在正则字符类[]内部,+属于普通字符,不需要转义,直接写入即可。
修正后的正则表达式
方案1:允许所有片段包含+或-
如果只是需要匹配包含+的科学计数法格式(片段可带+或-),只需把+加入字符类:
re=r"(?<b>[A-Z0-9.+_-]+)\s+(?<c>[A-Z0-9.+_-]+)\s+(?<d>[A-Z0-9.+_-]+)"
字符类里的A-Z已经覆盖了科学计数法里的大写E,加上+后就能匹配带E+的片段。
方案2:强制特定捕获组包含+
如果要求某个捕获组(比如c组)必须包含+,可以对该组做更严格的格式限制:
re=r"(?<b>[A-Z0-9.+_-]+)\s+(?<c>[A-Z0-9.-]+E\+[0-9]+)\s+(?<d>[A-Z0-9.+_-]+)"
这个版本会强制c组匹配类似0.0000E+00的格式,确保该片段一定包含+。
验证效果
用方案1的正则测试你的目标字符串:
import re a="250010.E-03 0.0000E+00 0.0000E-00" pattern = r"(?<b>[A-Z0-9.+_-]+)\s+(?<c>[A-Z0-9.+_-]+)\s+(?<d>[A-Z0-9.+_-]+)" match = re.fullmatch(pattern, a) if match: print(f"RegexMatch({a!r}, b={match['b']!r}, c={match['c']!r}, d={match['d']!r})")
输出结果和你期望的完全一致:
RegexMatch('250010.E-03 0.0000E+00 0.0000E-00', b='250010.E-03', c='0.0000E+00', d='0.0000E-00')
内容的提问来源于stack exchange,提问作者brien
相关产品推荐
相关产品推荐

