如何将三种a/b转\frac{a}{b}的Lua模式合并为单个模式?
合并Lua模式实现分数格式转换
转换需求
需要将包含a/b(a、b为任意非空格字符)的文本按以下三种场景转换:
- 输入:
Hello a/b hi→ 输出:Hello \frac{a}{b} hi - 输入:
a/b hi→ 输出:\frac{a}{b} hi - 输入:
Hello a/b→ 输出:Hello \frac{a}{b}
原有分场景实现
最初针对三种场景分别编写了三个替换语句:
line, _ = string.gsub(line, "%s+(%S+)/(%S+)%s+", "\\frac{%1}{%2}") line, _ = string.gsub(line, "^(%S+)/(%S+)%s+", "\\frac{%1}{%2}") line, _ = string.gsub(line, "%s+(%S+)/(%S+)$", "\\frac{%1}{%2}")
合并为单模式实现
可以通过匹配行首/前置空格、行尾/后置空格的可选情况,将三个模式浓缩为单个Lua模式:
line, _ = string.gsub(line, "(^|%s+)(%S+)/(%S+)(%s+|$)", "%1\\frac{%2}{%3}%4")
模式解释
(^|%s+):匹配行首或者一个及以上前置空格,用捕获组保留该部分(%S+)/(%S+):捕获非空格字符组成的a和b,匹配a/b核心结构(%s+|$):匹配一个及以上后置空格或者行尾,用捕获组保留该部分- 替换时通过
%1、%4保留原有的前置/后置空格或行首行尾位置,确保转换后文本的空格布局和原文本一致,完美覆盖三种场景。
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

