我试图找出正则表达式/脚本逻辑来解析这样的东西;
RAW DATA
{CLNDSDB=MedGen:OMIM:SNOMED_CT;CLNDSDBID=C0432243:271640:254100000}
Here, the value is;
MedGen = C0432243
OMIM = 271640
SNOMED_CT = 254100000
Result: 271640
我正在设想一个复杂的if-else循环来获得结果。只是想知道是否有任何简单的方法来获得相同的结果。非常感谢您的回答。
答案 0 :(得分:2)
也许是这样的:(假设总有三个字段)
(?<=[=:])(?<key>[^:;]+)(?=[:=;](?:[^:;=]+[=;:]){3}(?<val>[^:]+))
我们的想法是在前瞻断言中捕获字段值,以免干扰重叠的子字符串。
但是,使用连续拆分可能更简洁。
答案 1 :(得分:0)
很难从问题中判断输入字符串是两行还是一行:
str = 'RAW DATA
{CLNDSDB=MedGen:OMIM:SNOMED_CT;CLNDSDBID=C0432243:271640:254100000}
'
或
str = '{CLNDSDB=MedGen:OMIM:SNOMED_CT;CLNDSDBID=C0432243:271640:254100000}'
但是,在任何一种情况下我都会使用一个简单的模式:
str = '{CLNDSDB=MedGen:OMIM:SNOMED_CT;CLNDSDBID=C0432243:271640:254100000}'
medgen, omim, snomed_ct = str.match(/(\w+):(\w+):(\w+)}/).captures
medgen # => "C0432243"
omim # => "271640"
snomed_ct # => "254100000"
我正在设想一个复杂的if-else循环来获得结果。
好吧,不要这样做。大多数编程解决方案都非常简单,所以从简单开始。随着您的学习,您的编程工具箱将随着您熟悉新的工作方式而增长,并且您会发现某些工具对某些任务更有用。不过,总是从“简单”开始,让基础工作,然后仔细添加处理角落案件。
在这种情况下,使用正则表达式时,在字符串中查找可用于定位目标文本的地标非常重要。在这种情况下,尾随的“}
”是可用的,因此我编写了三个简单的捕获来查找由\w
分隔的:
个字符串。