【发布时间】:2021-05-11 15:10:14
【问题描述】:
我正在尝试找到一种方法来解析相当长的文本字符串。我想在字符串中的某些单词之间提取一个子字符串。下面是我正在查看的文本类型的示例:
String1 = "Report failed: FailType: FailLevel, FailDate 12.01.2016. InstanceType (name_of_type) -9234as-df32f-2f2f Error : Error_message1. Error : Error_message2. Error : Error_message3."
String2 = "Report failed: FailType: FailLevel, FailDate 12.01.2016. InstanceType (name_of_type) -zx3s-d2f-211 Error : Error_message1. Error : Error_message2."
我想解析字符串并创建如下所示的列:
Obs# | ErrorType1 | ErrorType2 | ErrorType3
1 | Error_message1 | Error_message2 | Error_message3
2 | Error_message1 | Error_message2 |
每个字符串的错误数量不同。
我已根据以下最初的两个 cmets 更新了我当前的问题进度:
If _N_ = 1 Then Pattern = Prxparse("/ Error /");
Retain Pattern;
Position = prxmatch(Pattern, Strings);
Substring = substr(Strings, Position);
这确实在第一次出现“错误”一词后给了我整个子字符串 - 空格是故意的。但是,我无法创建循环或搜索所有出现的字符串“错误”。我有这样的想法。
if prxmatch(Pattern, Strings) then
do;
String1 = prxposn(Pattern, 1, Strings);
String2 = prxposn(Pattern, 2, Strings);
end;
但根据我的结果(String1 和 String2 为空),很明显我对 prxposn 函数缺乏了解。我刚刚找到了 PRXNEXT 功能,并想试一试。还不知道如何一次只获得一条错误消息。
最好的问候!
【问题讨论】:
-
看看SCAN()函数。
-
Regex 在这里可能是一个不错的选择。检查
prxparse和prxposn函数。您可以使用这些来查找特定的字符串并返回它们的开始和结束位置。 -
SCAN() 函数似乎需要对要解析的字符串进行非常“严格”的设置,这是我的字符串不符合的标准。使用正则表达式可能是更好的方法,我会尝试研究它。我已经更新了我上面的问题,如果你认为你能在我的路上帮助我。