2009-11-12 20 views
-1

遇到問題纏繞我的頭解決這個問題。我需要解析此使用正則表達式來創建以下幫助正則表達式來創建定義列表

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> 
+1

,並有使用'拆分考慮'用那種語言? – Kobi 2009-11-12 13:21:39

+0

的正則表達式應該是很容易的(像'([^ |] +)=([^ |] *)'),但至極的編程語言你想它嵌入? – tangens 2009-11-12 13:22:37

+0

Tangens,看起來會起作用,但是i梁|是不是使用這種格式逃脫

$ 1
$ 2
jeff 2009-11-12 13:29:48

回答

0

事情是這樣的:

/(?:(.*?)=(.*?)(\||$))+/ 
+0

格雷格,你錯過了'+'之前的結尾')'。 – 2009-11-12 13:31:27

+0

糟糕。固定 - 感謝 – Greg 2009-11-12 21:57:09

0

您可以使用

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

鴨與「全球」旗幟一起。

說明:

 
(   # 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

託默勒格,在某些情況下,該數據包含有像定義的定義空白項「主題 - TPI或間距」,但沒有與它相關聯的價值。在這種情況下,您將使用空白

。 – jeff 2009-11-12 13:46:37

+0

您的「類似這樣的結果」示例似乎省略了空條目。我想你想隱瞞他們。如果你想讓它們顯示,把匹配組2中的'[^ |] +'改成'[^ |] *'。 – Tomalak 2009-11-12 13:59:08

+0

您的權利我想將其從結果集中移除。我會怎麼做? 查詢將其刪除,但它們不會從正在生成的實際結果中刪除。 – jeff 2009-12-12 04:30:25

1

如果您不需要重新排列物品或改變它們的值,並有信心值本身不包含等號或用作輸入標記豎線,您可以將一系列正則表達式的介紹HTML。使用從斯卡拉Java的String類,這可能是一個密集而有效的一行:

"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>