我有以下字符串:“ AZS40G是ZrO2含量最低为39%的硅酸铝锆硅材料,在生产烧结AZS耐火材料和需要熔融锆石莫来石的应用中是一种很好的替代品。C1R5”。
我想使用正则表达式在文本中查找化学式中的所有数字(数字前面的字母的实例,在这种情况下不包括代号缩写,即“ AZS40G”,并用<sub></sub>
标签包裹。) / p>
我正在用php进行所有操作,由于我不知道从regex开头,所以提供了以下伪代码/ php示例:
$text = "AZS40G is Alumina Zircon Silicate material with ZrO2 content of 39% minimum, which serves as a great substitute in applications for production of sintered AZS refractories and where the Fused Zircon mullite is required. Zr5O2, M20R2, C1R5";
preg_replace('/(AZS40G!)(?<=[A-Z])\d+/', '<sub>${1}</sub>', $text);
预期结果将是所有实例,如下所示:
我有以下字符串:“ AZS40G是ZrO 2 含量最小为39%的氧化铝锆硅酸盐材料,在烧结AZS耐火材料的生产和熔融生产中可作为替代品需要锆石莫来石。C 1 R 5 ”。
答案 0 :(得分:0)
您可以使用此替换项:
// Extract first word from text, as it must be excluded from the replacement
list($name, $def) = explode(" ", $text, 2);
// Make replacement in the rest
$result = $name . " " . preg_replace("/([A-Z][a-z]?)(\d+)/", "$1<sub>$2</sub>", $def);
请注意,元素名称可以以小写字母结尾,因此[a-z]?
。
我假设文本的第一个单词代表应从替换操作中排除的名称。仅仅从文本中拉出它,进行替换,然后再次添加,可能是最简单的。
答案 1 :(得分:0)
使用跳过/失败跳过缩写。
for(int16_t i = PIXEL_NUM-1 ; i >= 0; i --)
https://regex101.com/r/VglQ3K/1
扩展
\b(?:AZS40G|BZS40G|CZS40G)\b(*SKIP)(*FAIL)|(?<=[A-Z])(\d+)