我正在尝试清除ECG的输出,以进一步分析心率变异性。具体来说,我需要从文本文件中删除所有内容,但单词“ start”之间的数字除外,因此剩下的唯一内容就是一列数字。
以下是输出示例:
<EMSE_Event_List>
<bSaveNotation>0</bSaveNotation>
<sQID></sQID>
<bUseQID>1</bUseQID>
<Event><Name>[seg]</Name><Start>0</Start><Stop>0</Stop>
<Status>1</Status><Color>255</Color><Attribute>0</Attribute>
<TimeStart>0</TimeStart><TimeStop>0</TimeStop>
<FreqStart>0</FreqStart><FreqStop>0</FreqStop>
<FWHM_Time>0</FWHM_Time><FWHM_Freq>0</FWHM_Freq></Event>
<Event><Name>R</Name><Start>186</Start><Stop>186</Stop>
<Status>2</Status><Color>255</Color><Attribute>0</Attribute>
<TimeStart>0</TimeStart><TimeStop>0</TimeStop>
<FreqStart>0</FreqStart><FreqStop>0</FreqStop>
答案 0 :(得分:1)
这是标准xml格式。解决此问题的最佳方法是使用XML解析器工具。 XML
和xml2
是两个流行的软件包/库。我更喜欢使用xml2
库。
使用XML解析器,可以很容易地从仅请求的节点中提取值,而无需使用复杂的正则表达式语法。
text<-"<EMSE_Event_List>
<bSaveNotation>0</bSaveNotation>
<sQID></sQID>
<bUseQID>1</bUseQID>
<Event><Name>[seg]</Name><Start>0</Start><Stop>0</Stop>
<Status>1</Status><Color>255</Color><Attribute>0</Attribute>
<TimeStart>0</TimeStart><TimeStop>0</TimeStop>
<FreqStart>0</FreqStart><FreqStop>0</FreqStop>
<FWHM_Time>0</FWHM_Time><FWHM_Freq>0</FWHM_Freq></Event>
<Event><Name>R</Name><Start>186</Start><Stop>186</Stop>
<Status>2</Status><Color>255</Color><Attribute>0</Attribute>
<TimeStart>0</TimeStart><TimeStop>0</TimeStop>
<FreqStart>0</FreqStart><FreqStop>0</FreqStop></Event></EMSE_Event_List>"
library(xml2)
page<-read_xml(text)
values<-xml_text(xml_find_all(page, "//Start"))
values<-as.numeric(values)
values
[1] 0 186
有关另一个示例,请参见此问题:get value from xml with r by attribute
答案 1 :(得分:0)
使用stringr
库:
library(stringr)
str_extract_all(text,"(?<=<Start>)[0-9]+(?=</Start>)")
[[1]]
[1] "0" "186"
但是xml2
也应该可以正常工作
答案 2 :(得分:-1)
基于R的解决方案
s <- "<EMSE_Event_List>
<bSaveNotation>0</bSaveNotation>
<sQID></sQID>
<bUseQID>1</bUseQID>
<Event><Name>[seg]</Name><Start>0</Start><Stop>0</Stop> .
<Status>1</Status><Color>255</Color><Attribute>0</Attribute> .
<TimeStart>0</TimeStart><TimeStop>0</TimeStop> .
<FreqStart>0</FreqStart><FreqStop>0</FreqStop> .
<FWHM_Time>0</FWHM_Time><FWHM_Freq>0</FWHM_Freq></Event>
<Event><Name>R</Name><Start>186</Start><Stop>186</Stop> .
<Status>2</Status><Color>255</Color><Attribute>0</Attribute> .
<TimeStart>0</TimeStart><TimeStop>0</TimeStop>
<FreqStart>0</FreqStart><FreqStop>0</FreqStop>"
start <- unlist(gregexpr(pattern ="<Start>",s)) + 7
end <- unlist(gregexpr(pattern ="</Start>",s)) - 1
unname(mapply(substr, x=s, start=start, stop=end))
[1] "0" "186"
要开始添加的偏移量/减去要开始的偏移量。添加结尾以不包含匹配的字符串。
答案 3 :(得分:-1)
您将为此使用正则表达式。
John the Baptist baptizes Jesus in the Jordan River; the Holy Spirit appears overhead in the form of a dove. The artist, Gustave Doré (1832-1883), has placed his signature at the lower left of the woodcut, and the engraver’s signature, A. Ligny, is located at the lower right.