You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则不区分大小写搜索化学元素单词,如何让输出匹配正则大小写?

解决方案

可以通过sed或awk工具实现需求,核心思路是先筛选出符合条件的单词,再将单词中的字符替换为对应元素符号的大小写格式。以下是两种可行方法:

方法一:使用awk实现精准匹配替换

这种方法会从左到右优先匹配最长的元素符号(避免短符号先匹配导致长符号无法匹配),替换为原元素符号的大小写格式:

  1. 先将元素符号按长度从长到短排序(确保双字母符号优先匹配):
awk '{print length($0), $0}' element_symbols.txt | sort -nr | cut -d' ' -f2- > sorted_elements.txt
  1. 结合grep筛选和awk替换:
grep -Pi "^($(paste -s -d'|' element_symbols.txt))+$" /usr/share/dict/words | awk -v elements="$(cat sorted_elements.txt)" '
BEGIN {
    n = split(elements, arr, "\n")
    for (i=1; i<=n; i++) {
        sym = arr[i]
        sym_lower = tolower(sym)
        map[sym_lower] = sym
        len = length(sym_lower)
        if (len > max_len) max_len = len
    }
}
{
    word = tolower($0)
    result = ""
    pos = 1
    while (pos <= length(word)) {
        matched = 0
        for (l=max_len; l>=1; l--) {
            substr_word = substr(word, pos, l)
            if (substr_word in map) {
                result = result map[substr_word]
                pos += l
                matched = 1
                break
            }
        }
        if (!matched) break
    }
    print result
}
'

方法二:使用sed批量替换

通过生成按长度排序的sed替换规则,将小写单词替换为元素符号的大小写格式:

  1. 生成sed替换脚本(按元素符号长度从长到短排序):
awk '{print length($0), $0}' element_symbols.txt | sort -nr | cut -d' ' -f2- | awk '{print "s/"tolower($0)"/"$0"/g"}' > sed_replace.sed
  1. 筛选单词并替换:
grep -Pi "^($(paste -s -d'|' element_symbols.txt))+$" /usr/share/dict/words | tr '[:upper:]' '[:lower:]' | sed -f sed_replace.sed

两种方法都能将匹配到的单词(如Hershey)转换为元素符号大小写组合的格式(如HErSHeY),其中awk方法逻辑更清晰,适配复杂匹配场景的能力更强。

内容的提问来源于stack exchange,提问作者qwr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:23:20