在Simulink m函数中使用正则表达式从字符串中提取第n个字段

时间:2017-12-14 08:35:08

标签: regex matlab simulink

我正在使用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方法在这里不起作用)

1 个答案:

答案 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的内容。