如何在VBA中用正则表达式匹配下标字符LC₅₀
VBA正则匹配带下标LC₅₀的独立字符串
问题描述
需要匹配包含LC₅₀在内的多个字符串,目前在VBA中可输入上标字符,但无法输入下标字符。现有正则表达式代码如下:
Dim r1 As Object Set r1 = New RegExp r1.Pattern = "^(\(?[a-z].*[a-z]\)?\.?,-?:?|\(?\d{1,5}|%,?|[a-z]|LC50|\D.*³|[A-Z]\d{1},?|\(?\d{1,4}\..*\)?|°.*|[A-Z]\d(-|:).*|MPa|\(o-,|m-,|p-\))$": r1.Global = True: Set r1Matches = r1.Execute(Replace(arry(i), "-", "-"))
请问如何用VBA正则表达式匹配独立字符串LC₅₀?
解决方案
VBA的RegExp支持Unicode字符匹配,解决下标字符的问题有两种可靠方式,同时要确保匹配独立字符串:
直接使用带下标的LC₅₀字符
从支持下标格式的工具(如Word、网页)复制完整的LC₅₀,替换原正则中的LC50,并添加单词边界\b确保匹配独立字符串,修改后的正则片段为\bLC₅₀\b。使用Unicode转义序列
下标5的Unicode编码是U+2085,下标0是U+2080,可以用\u2085和\u2080表示,对应的正则片段为\bLC\u2085\u2080\b,效果和直接使用下标字符完全一致。
修改后的完整代码示例
Dim r1 As Object Set r1 = New RegExp ' 这里用直接复制的下标字符示例,也可以替换为Unicode转义写法 r1.Pattern = "^(\(?[a-z].*[a-z]\)?\.?,-?:?|\(?\d{1,5}|%,?|[a-z]|\bLC₅₀\b|\D.*³|[A-Z]\d{1},?|\(?\d{1,4}\..*\)?|°.*|[A-Z]\d(-|:).*|MPa|\(o-,|m-,|p-\))$" r1.Global = True ' 原代码中Replace(arry(i), "-", "-")是无意义操作,直接传入arry(i)即可 Set r1Matches = r1.Execute(arry(i))
说明
\b是单词边界元字符,能确保LC₅₀前后不是字母、数字或下划线,避免匹配到类似LC₅₀XYZ或ABC_LC₅₀这类非独立的字符串。- 两种写法任选其一即可,若直接复制下标字符遇到编码问题,优先使用Unicode转义序列。
内容的提问来源于stack exchange,提问作者MK01111000
相关产品推荐
相关产品推荐

