为了账号安全,请及时绑定邮箱和手机立即绑定

获取第一个字符 '<' 和最后一个字符 '>' 之间的所有内容

获取第一个字符 '<' 和最后一个字符 '>' 之间的所有内容

C#
白衣染霜花 2022-06-12 10:24:42
所以我试图只从这种格式中获取 XML:--------------------------3cbec9ce8f05Content-Disposition: form-data; name="owServerData"; filename="details.xml"Content-Type: text/plain<?xml version="1.0" encoding="UTF-8"?><Devices-Detail-Response xmlns="http://www.example.com">  // Rest omitted</Devices-Detail-Response>------------------------------3cbec9ce8f05--所以基本上第一个 < 之后的所有内容以及最后一个 '>' 之间的所有内容。到目前为止.*<(.*)>.*,我只有返回<?xml version="1.0" encoding="UTF-8"?>谢谢!预期结果:<?xml version="1.0" encoding="UTF-8"?><Devices-Detail-Response xmlns="http://www.example.com">  // Rest omitted</Devices-Detail-Response>
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您可以尝试以下正则表达式:


<\?xml version="1\.0" encoding="UTF-8"\?>\s*<\s*([^\s]*)(?:.|\s)*<\/\s*\1\s*>

输入:


--------------------------3cbec9ce8f05

Content-Disposition: form-data; name="owServerData"; filename="details.xml"

Content-Type: text/plain


<?xml version="1.0" encoding="UTF-8"?>

<Devices-Detail-Response xmlns="http://www.example.com"> 

 <device>a</device>

 <info>abc</info>

 <test1><u>123</u><v>456</v><z/></test1>

</Devices-Detail-Response>

------------------------------3cbec9ce8f05--

输出:


<?xml version="1.0" encoding="UTF-8"?>

<Devices-Detail-Response xmlns="http://www.example.com" 

 <device>a</device>

 <info>abc</info>

 <test1><u>123</u><v>456</v><z/></test1>

</Devices-Detail-Response>

演示: https ://regex101.com/r/r6Kbh2/3/


查看完整回答
反对 回复 2022-06-12
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

默认情况下,句点与换行符不匹配。您将需要使用s修饰符。

此外,你的第一个点是贪婪的,它会消耗你所有的<直到最后一个仍然允许剩余模式匹配的点。我不会使用非贪婪 dot .*?,而是使用否定字符类来匹配除<.

/[^<]*<(.*)>.*/s

Regex101上查看

另一种方法是在字符类中使用\r(回车)和(换行)字符:\n

/[^<]*<((?:.|[\r\n])*)>.*/


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信