Регулярное выражение извлекает числовое значение в группу

#c# #javascript #asp.net #python #regex

#c# #javascript #asp.net #python #регулярное выражение

Вопрос:

У меня есть простой HTML-код:

 <span class="someclass" title="4.5 stars"></span>
  

или это может быть:

 <span class="someclass" title="5 stars"></span>
  

Я использовал ((d .d )|(d )) star , но он извлек мне 3 группы, мне нужна одна с числовым значением.

Как я могу извлечь 4.5 и 5 в обеих строках, используя регулярное выражение в одной группе?

Спасибо!

Комментарии:

1. Python, c #, asp.net а js? Что вы используете?

2. Как и большинство людей, я бы посоветовал вам использовать Html Agility Pack для .net htmlagilitypack.codeplex.com

Ответ №1:

Попробуйте удалить внутренние круглые скобки:

 (d .d |d ) star
  

Кроме того, вы можете рассмотреть возможность использования синтаксического анализатора HTML для первого извлечения атрибутов, а не применения регулярного выражения непосредственно к необработанному HTML.

Ответ №2:

Вы можете сделать так, чтобы группы не захватывались, добавив ?: после открывающей скобки следующим образом

 ((?:d .d )|(?:d )) star
  

но ваши внутренние скобки в вашем случае не нужны.

Вы можете переписать свое выражение в

 (d (?:.d )?) star
  

Ответ №3:

В python это можно было бы сделать таким образом:

 import re

txt = '<span class="someclass" title="4.5 stars"></span>, <span class="someclass" title="5 stars"></span>'
re.findall(r'd [.]d |d ', txt)

['4.5', '5']