为什么正则表达式不匹配文件和变量?

时间:2015-01-23 15:57:53

标签: regex string go

当我使用golang进行正则表达式匹配时。文件和变量之间有什么不同? 1.在var

str:=`<Row ss:Height="19.8">
 <Cell ss:StyleID="s74"><Data>{{range $prj:=.prj}}</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0" >
    <Cell ss:StyleID="s70"/>
    <Cell ss:StyleID="s71"><Data>{{$prj.PrjName}}</Data></Cell>
    <Cell ss:StyleID="s72"><Data>{{$prj.ReplyNo}}</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
   <Cell><Data>{{end}}</Data></Cell>
   </Row>`
   re := regexp.MustCompile(`<Row[^>]*>[\s\S.].*({{[range|end].*?}})</Data></Cell>[\s\S]*?</Row>`)
   fmt.Println(re.MatchString(str)) //it is true!
  1. 来自文件。

    body,_:= ioutil.ReadFile(&#34; ./ ag.xml&#34;)//ap.xml内容是str的内容
    str:= string(body)// str是上面1个str的内容
    re:= regexp.MustCompile(<Row[^>]*>[\s\S.].*({{[range|end].*?}})</Data></Cell>[\s\S]*?</Row>
    fmt.Println(re.MatchString(str))//但结果alaways是假的?

  2. 它们的不同之处是什么?怎么解决呢?

1 个答案:

答案 0 :(得分:0)

你能试试这样的......

body, _ := ioutil.ReadFile("./ag.xml") //ap.xml content is the str's contents
str := string(body) //str is the above 1 str's contents
re := regexp.MustCompile(< R o w [^>]*> [\s\S.].*({{[range|end].*?}}) < / D a t a > < / C e l l > [\s\S]*? < / R o w >)
fmt.Println(re.MatchString(str))

我可能错过了两个字符之间的空格,再次检查它。如果这意味着它意味着您正在使用的文件是UTF16字符集或者其他东西,但您的正则表达式与字符串匹配,那么您可能需要将UTF16转换为字符串并匹配它。