Помогите с регулярным выражением для создания списка определений - PullRequest
0 голосов
/ 12 ноября 2009

Не могу обернуть голову вокруг этого. Мне нужно разобрать это с помощью регулярного выражения, чтобы создать список определений ниже

Width=3/8 in|Length=1 in|Thread - TPI or Pitch=|Bolt/Screw Length=|Material=|Coating=|Type=Snap-On|Used With=|Quantity=5000 per pack|Wt.=20 lb|Color=

Результат будет примерно таким

<dt>Width</dt>
<dd>3/8 in</dd>
<dt>Length </dt>
<dd>1 Inch</dd>
<dt>Thread - TPI or Pitch</dt>
<dd></dd>
<dt>Quantity</dt>
<dd>5000 a pack</dd>
<dt>Wt.</dt>
<dd>20 lb</dd>

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Если вам не нужно переупорядочивать элементы или изменять их значения, и вы уверены, что сами значения не содержат знаков равенства или вертикальных полос, используемых в качестве разметки во входных данных, вы можете применить ряд регулярных выражений, чтобы представить HTML. Используя Java-класс String из Scala, это может быть плотная, но эффективная однострочная строка:

"Escape test=&<>|Width=3/8 in|Length=1 in|Thread - TPI or Pitch=|Bolt/Screw Length=|Material=|Coating=|Type=Snap-On|Used With=|Quantity=5000 per pack|Wt.=20 lb|Color=".
replaceAll("&","&amp;").
replaceAll("<","&lt;").
replaceAll(">","&gt;").
replaceAll("^","<dl>\n\t<dt>").
replaceAll("=","</dt>\n\t<dd>").
replaceAll("\\|","</dd>\n\n\t<dt>").
replaceAll("$","</dd>\n</dl>")

, что дает

<dl>
<dt>Escape test</dt>
<dd>&amp;&lt;&gt;</dd>

<dt>Width</dt>
<dd>3/8 in</dd>

<dt>Length</dt>
<dd>1 in</dd>

<dt>Thread - TPI or Pitch</dt>
<dd></dd>

<dt>Bolt/Screw Length</dt>
<dd></dd>

<dt>Material</dt>
<dd></dd>

<dt>Coating</dt>
<dd></dd>

<dt>Type</dt>
<dd>Snap-On</dd>

<dt>Used With</dt>
<dd></dd>

<dt>Quantity</dt>
<dd>5000 per pack</dd>

<dt>Wt.</dt>
<dd>20 lb</dd>

<dt>Color</dt>
<dd></dd>

0 голосов
/ 12 ноября 2009

Вы можете использовать

([^=|]+)=([^|]+)(?:\||$)

Применить с «глобальным» флагом.

Пояснение:

(             # start match group 1
  [^=|]+      # any character that's not a "=" or "|", at least once
)             # end match group 1
=             # a literal "="
(             # start match group 2
  [^|]+       # any character that's not a "|", at least once
)             # end match group 2
(?=           # look-ahead: followed by
  \|          # either a literal "|"
  |           # or…
  $           # the end of the string
)             # end look-ahead

Интересующие вас строки находятся в группах совпадений 1 и 2 соответственно. Для меня вышеуказанные совпадения:

  1. Width = 3/8 in
  2. Length = 1 in
  3. Type = Snap-On
  4. Quantity = 5000 per pack
  5. Wt. = 20 lb

Ваш пример несовместим с Thread - TPI or Pitch.

0 голосов
/ 12 ноября 2009

Примерно так:

/(?:(.*?)=(.*?)(\||$))+/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...