RegEx用于解析化学式

迈克尔·斯诺登

我需要一种将化学式分离为其成分的方法。结果应如下所示:

   Ag3PO4 -> [Ag3, P, O4]
      H2O -> [H2, O]
   CH3OOH -> [C, H3, O, O, H]
Ca3(PO4)2 -> [Ca3, (PO4)2]

我不知道regex语法,但是我知道我需要像这样的东西

[可选括号] [大写字母] [0个或多个小写字母] [0个或多个数字] [可选括号] [0个或多个数字]

这工作

NSRegularExpression *regex = [NSRegularExpression
                              regularExpressionWithPattern:@"[A-Z][a-z]*\\d*|\\([^)]+\\)\\d*"
                              options:0
                              error:nil];
NSArray *tests = [[NSArray alloc ] initWithObjects:@"Ca3(PO4)2", @"HCl", @"CaCO3", @"ZnCl2", @"C7H6O2", @"BaSO4", nil];
for (NSString *testString in tests)
{
    NSLog(@"Testing: %@", testString);
    NSArray *myArray = [regex matchesInString:testString options:0 range:NSMakeRange(0, [testString length])] ;
    NSMutableArray *matches = [NSMutableArray arrayWithCapacity:[myArray count]];

    for (NSTextCheckingResult *match in myArray) {
        NSRange matchRange = [match rangeAtIndex:0];
        [matches addObject:[testString substringWithRange:matchRange]];
        NSLog(@"%@", [matches lastObject]);
    }
}
乌鲁格贝克·乌米罗夫

(PO4)2 真的坐在所有人旁边。

让我们从没有括号的简单匹配项开始:

[A-Z][a-z]?\d*

使用正则表达式上面我们可以成功的解析Ag3PO4H2OCH3OOH

然后,我们需要以某种方式为组添加表达式。分组本身可以使用以下方式匹配:

\(.*?\)\d+

因此,我们添加or条件:

[A-Z][a-z]?\d*|\(.*?\)\d+

正则表达式可视化

演示版

在特定情况下适用。但也许您还有更多样本。

注意:嵌套括号会出现问题。例如Co3(Fe(CN)6)2

如果要处理这种情况,可以使用以下正则表达式:

[A-Z][a-z]?\d*|(?<!\([^)]*)\(.*\)\d+(?![^(]*\))

正则表达式可视化

对于Objective-C,您可以使用不带环顾四周的表达式:

[A-Z][a-z]?\d*|\([^()]*(?:\(.*\))?[^()]*\)\d+

正则表达式可视化

演示版

还是带有重复的正则表达式(我不知道这样的公式,但是如果有类似的情况A(B(CD)3E(FG)4)5-一个括号内有多个括号块。

[A-Z][a-z]?\d*|\((?:[^()]*(?:\(.*\))?[^()]*)+\)\d+

正则表达式可视化

演示版

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CSS中的化学式

来自分类Dev

如何使用正则表达式解析化学式?

来自分类Dev

在ggplot轴类别标签中正确显示化学式

来自分类Dev

如何在ggplot中编写化学式

来自分类Dev

替换化学式字符串中的文本

来自分类Dev

以编程方式将原子与给定的化学式分开

来自分类Dev

正则表达式以提取化学式和符号

来自分类Dev

化学式下标/上标的 Ruby 正则表达式

来自分类Dev

BeautifulSoup 中用于 XML 解析的 RegEx

来自分类Dev

如何获得用于kdevelop的深色化学?

来自分类Dev

sed,awk,regex修改化学术语

来自分类Dev

python中的regex模式,用于解析HTML标题标签

来自分类Dev

C#Regex语法帮助,用于解析字符串

来自分类Dev

重载解析适用于函数,但不适用于隐式构造函数参数

来自分类Dev

用纯JavaScript编写的XML解析器,用于嵌入式环境

来自分类Dev

在Excel中使用VBA宏从NCI化学标识符解析器检索化学结构的图像

来自分类Dev

std :: regex用于解析由冒号分隔为不同组的字符串

来自分类Dev

Python Regex用于解析以给定的BNF类格式定义的树结构

来自分类Dev

缓存隐式解析

来自分类Dev

隐式解析失败?

来自分类Dev

用于解析PFObject的NSCoding

来自分类Dev

DSL用于文本解析

来自分类Dev

NullPointerException用于解析查询

来自分类Dev

用于在python中进行强化学习的仿真和可视化库?

来自分类Dev

响应式容器,用于响应式图像

来自分类Dev

用于HTML的Vim Regex

来自分类Dev

Scala Regex解析URL

来自分类Dev

HTML解析与Regex

来自分类Dev

使用Regex解析URI