我正在寻找RegEx来返回段落中的第一个[n]单词,或者如果段落包含少于[n]个单词,则返回完整的段落.
例如,假设我最多需要前7个单词:
<p>one two <tag>three</tag> four five, six seven eight nine ten.</p><p>ignore</p>
Run Code Online (Sandbox Code Playgroud)
我得到:
one two <tag>three</tag> four five, six seven
Run Code Online (Sandbox Code Playgroud)
对包含少于请求的字数的段落使用相同的RegEx:
<p>one two <tag>three</tag> four five.</p><p>ignore</p>
Run Code Online (Sandbox Code Playgroud)
简单地回复:
one two <tag>three</tag> four five.
Run Code Online (Sandbox Code Playgroud)
我对此问题的尝试产生了以下RegEx:
^(?:\<p.*?\>)((?:\w+\b.*?){1,7}).*(?:\</p\>)
Run Code Online (Sandbox Code Playgroud)
但是,这只返回第一个单词 - "one".它不起作用.我觉得 .*?(在\ w +\b之后)导致问题.
我哪里错了?任何人都可以提出一个有效的RegEx吗?
仅供参考,我正在使用.Net 3.5的RegEX引擎(通过C#)
非常感谢
好的,完成重新编辑以确认新的"规范":)
我很确定你不能用一个正则表达式做到这一点.最好的工具肯定是HTML解析器.我能用正则表达式得到的最接近的是两步法.
首先,用以下内容隔离每个段落的内容:
<p>(.*?)</p>
Run Code Online (Sandbox Code Playgroud)
您需要设置RegexOptions.Singleline段落是否可以跨越多行.
然后,在下一步中,迭代您的匹配并在每个匹配上应用以下正则表达式Group[1].Value:
((?:(\S+\s+){1,6})\w+)
Run Code Online (Sandbox Code Playgroud)
这将匹配由空格/制表符/换行符分隔的前七个项目,忽略任何尾随标点符号或非单词字符.
但它会将由空格分隔的标签视为其中一个项目,即在
One, two three <br\> four five six seven
Run Code Online (Sandbox Code Playgroud)
它只会匹配到six.我想那是正则表达式,没有办法解决这个问题.
| 归档时间: |
|
| 查看次数: |
4661 次 |
| 最近记录: |