我正在使用Simulink处理一些通过TCP / IP实时从远程服务器发送的字符串。我每隔几毫秒就会在Simulink中得到的字符串(以ASCII整数的形式)(逗号分隔的字段):
$FORMAT,YYYY-MM-DD HH:MM:SS.FFF,field1,field2,field3,field4,field5,field6*XX
其中fields1-3和field5以及field6是字符串。 XX是XOR校验和。 Field3 告诉我该值的名称是什么, Field4 有一些整数值,这两个是我需要用正则表达式提取的字段。我该怎么做?
PS:在接收端的Simulink(2016a)中我有TCP / IP接收块,字符串在Simulink的m函数中处理,因此它有一些来自常规Matlab文件的限制(例如strsplit
方法在这里不起作用)
答案 0 :(得分:1)
我不知道Simulink的“m-function”支持什么样的正则表达式,但如果你能用它提取capturing groups,你可以轻松匹配每个字段。为了理解,这里有一个扩展空格和注释的正则表达式:
bot = ChatBot(
"Terminal",
read_only=True,
)
这里是紧凑的形式:
^ # start of the line
[^,]* , # format
[^,]* , # date
[^,]* , # field1
[^,]* , # field2
([^,]*) , # field3 in capture group 1
([^,]*) , # field4 in capture group 2
# we don’t need to match any more fields; we have the two we want
匹配捕获组1和2(^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*),([^,]*),
,matches[1]
,但是在您的环境中执行此操作)以获取field3和field4的内容。