gpt4 book ai didi

java - 正则表达式忽略 html 标签,但从具有不同结束 anchor 的单词边界开始

转载 作者:行者123 更新时间:2023-11-30 11:40:44 25 4
gpt4 key购买 nike

首先让我说我需要一个仅使用正则表达式的解决方案。

我正在尝试使用第三个程序从 html 文件中提取描述。 此程序是基于 java 的,但我不能以任何方式操纵源代码!。我将正则表达式提交到的程序已经有另一个正则表达式脚本,指定从每个页面上的何处获取描述。如果您在其中定义匹配项,它有一个方便的功能,可以将该信息进一步分解为一个数组。

我想匹配描述中的每个句子,不管它是否是列表项。摆脱标签是理想的选择,因为它们会导致使用 \b 出现问题。指定开始匹配的位置。

起初我以为我可以编写一个正则表达式解决方案来捕获单词边界和句子结束字符之间的所有内容。像这样的 \b([^.!]+)[.!]然后我注意到一个问题,描述有时会包含列表项的附加部分。更复杂的是,有时列表项的第一部分会加粗或斜体。更罕见的可能是随机 <br></br>出于我不明白的原因在那里标记...

这是一篇有趣的文章中对常见布局的示例描述:

Children around the world are constantly exposed to the evil “Dolan”, an evil 
duckwho encourages rape, murder, pedophilia, stealing, homosexuality and a range
of other sins. ”Dolan” is considered a “meme”: an image that makes its way
around the internet via social networks such as Myspace, Friendster, or
Wikipedia.

<li>The duck is based on the character “Donald” created by the company Disney.
</li><li><b>Dolan, however</b>, is more overtly satanic and enjoys commit crimes
and offending Christianity. </li><li>He is best known for a series of internet
comics created in the socialist nation of Finland. </li><li><i>Being part of
Scandinavia</i>, the Finnish are clearly followers of Satan and Skrillex. </li>
<li>The comics are written in poor English to distract the viewer from how evil
and offensive they truly are.</li>

我尝试了几种不同的方法,但我仍然是一个正则表达式新手,并且得到了各种无法正常工作的不同返回值。这一个打破了一切,从标签中的任何字母开始:

(?:<li>|<b>|<i>)?\b([^.!<]+)[.!< ][<lbi/ ]

上面的代码给出了一个这样的数组(顺序随机化或者至少以我不理解的方式组织)

i>
Being Part of Scandinavia
i>
b>
Dolan, however
b>

几乎相同的可能会留在一些 html 标签中,我认为这是因为 li>满足词界要求。 注意:下面代码末尾有一个空格

\b([^.!<]+)[.!] 

这给出了这样一个数组

li>The duck is based on the character “Donald”...
li>li>b>Dolan, however/b>, is more overtly satanic...

就像我之前说的那样,我是正则表达式的新手,并且非常确定我使用的前瞻性错误。

请帮我解决一下!我不知道接下来要尝试什么。

PS,文章不是我写的,是从别的网站上复制过来的。不想冒犯

最佳答案

不要理会 \b ,它只会妨碍你。你也不需要环顾四周。以下正则表达式正确匹配示例文本中的所有句子。与@icrf 的正则表达式一样,句子中的任何标记都将保留在那里。摆脱这些需要第二步,我看不出有任何解决办法。

[^\s<>.!?][^<>.!?]*(?:<[^<>]+>[^<>.!?]*)*[.!?]

分解:

  1. [^\s<>.!?]从下一个不是空格、尖括号或句子标点符号的字符开始匹配。

  2. [^<>.!?]*继续匹配所需的字符,现在包括空格。

  3. <[^<>]+> : 如果找到左尖括号,这部分会尝试匹配 HTML 标签。然后它返回匹配非特殊字符与 [^<>.!?]* .它会继续这样权衡,直到没有更多的标签或非特殊字符可供使用。

  4. 最后,[.!?]匹配句末标点符号。

关于java - 正则表达式忽略 html 标签,但从具有不同结束 anchor 的单词边界开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com