【发布时间】:2020-11-21 07:33:33
【问题描述】:
我正在尝试提取巨大字符串中每个超链接的显示文本。 (字符串是通过打开和读取一个.rtf文件得到的,该文件有很多超链接。)超链接的格式一般是{\field{\*\fldinst HYPERLINK "http://www.mywebsite.com/"}{\fldrslt Click Here}}(我要点击这里),但往往包含很多带有换行符的嵌套格式:
示例 1(我要提取 Leonard T. Strand):text I don't want {\\field {\\*\\fldinst HYPERLINK "http://www.westlaw.com/Link/Document/FullText?findType=h&pubNum=176284&cite=0226771601&originatingDoc=I2e197170e0a011eaa13ca2bed92d37fc&refType=RQ&originationContext=document&vr=3.0&rs=cblt1.0&transitionType=DocumentItem&contextData=(sc.Search)" }{\\fldrslt \n{\\b0 \\cf5 \\f2 \\ul0 \\strike0 \\i0 \\fs20 \\sa0 \\sb0 \nLeonard T. Strand\n}}} text I don't want
示例 2(我想提取 Morgan v. Robinson 和 920 F.3d 521、523(8th Cir. 2019):text I don't want {\\field {\\*\\fldinst HYPERLINK "http://www.westlaw.com/Link/Document/FullText?findType=Y&serNum=2047938005&pubNum=0000506&originatingDoc=I2e197170e0a011eaa13ca2bed92d37fc&refType=RP&fi=co_pp_sp_506_523&originationContext=document&vr=3.0&rs=cblt1.0&transitionType=DocumentItem&contextData=(sc.Search)#co_pp_sp_506_523" }{\\fldrslt \n{\\b0 \\cf5 \\f2 \\i1 \\fs20 \n{\\b0 \\cf5 \\f2 \\ul0 \\strike0 \\i1 \\fs20 \\sa0 \\sb0 \nMorgan v. Robinson\n}\n}\n{\\b0 \\cf5 \\f2 \\ul0 \\strike0 \\i0 \\fs20 \\sa0 \\sb0 \n, 920 F.3d 521, 523 (8th Cir. 2019)\n}}} text I don't want
这适用于第一种类型,但不适用于第二种:regex = re.compile('\n?\}?\n\{\\\\field.*\\\\fldrslt \n.*\n(.*)\n') 理想情况下,我想要更通用的东西,适合超链接的广泛结构,但示例 2 中的多个文本位置给我带来了问题。
【问题讨论】:
-
为什么不匹配‘HYPERLINK\s+“(http.*?)”’然后使用组1?