需要使用Regex而不是解析器从HMTL/XML页面中提取属性,但不能使Regex <span class='street-address'> (?<Street>.*)从下面的文本(与此完全相同的行距)在Rubular中提升2346 21st Ave NE。
<span class='street-address'>
2346 21st Ave NE
</span>另外,我的Regex只有在压缩文本并且在第一个HTML标记之后和最后一个HTML标记之前有空格时才能工作。如果我更改Regex以消除这些空格,则跳过空格HTML标记。我想让Regex尽可能的充满活力。
无论在HTML标记或换行之前是否有空格,我如何构造一个起作用的Regex?
发布于 2015-05-11 01:37:21
正如您在几乎所有与xhtml和regex相关的答案中所发现的,除非您真正知道涉及哪些html内容,否则不应该使用regex解析html。我会使用html解析器代替。
您只需使用s (单行标志)并使用惰性量词。
<span class='street-address'>(?<Street>.*?)<\/span>还可以使用内联s标志,如下所示:
(?s)<span class='street-address'>(?<Street>.*?)<\/span>
^--- here另一方面,如果您不想使用regex标志,可以使用一个众所周知的技巧,方法是使用两个相反的集合,如[\s\S]:
<span class='street-address'>(?<Street>[\s\S]*?)<\/span>我只想让你知道,这个把戏意味着:
\s --> matches whitespace (spaces, tabs).
\S --> matches non whitespace (same as: [^\s])
[\s\S] --> matches whitespace or non whitespace (so... everything)你可以用这个技巧来处理你想要的任何东西,比如:
[\s\S] whitespace or non whitespace
[\w\W] word or non word
[\d\D] digit or non digit
[\b\B] word boundary or non word boundaryhttps://stackoverflow.com/questions/30158488
复制相似问题