開頭我正在解析一個文本文件,在每一行中運行,並且我在計算正則表達式時遇到了困難。部分解析涉及到發生的變化,如:正則表達式,找到一個字符串包含但不是以
& Eacute;到& eacute;
我試過以下的正則表達式,但它不返回任何東西:
/^(?!&)(É)/
有什麼建議?
開頭我正在解析一個文本文件,在每一行中運行,並且我在計算正則表達式時遇到了困難。部分解析涉及到發生的變化,如:正則表達式,找到一個字符串包含但不是以
& Eacute;到& eacute;
我試過以下的正則表達式,但它不返回任何東西:
/^(?!&)(É)/
有什麼建議?
所以,只有當它不在行首時,你纔想匹配É
?
使用
/(?<=.)É/
(假設Ruby 1.9的,因爲1.8不支持回顧後)
理由:.
匹配除換行符任何字符。因此,如果lookbehind斷言匹配,我們不在該行的開頭。
是的,這是訣竅:) – agmcleod 2011-05-03 20:41:13
'(?!^)'應該可以在任何版本中工作。 – 2011-05-04 11:29:32
如果要上線的任何位置匹配É
,但不是在第一個位置:
/^.+(É)/
此例如匹配"abcÉdef"
,但不是"É"
更新:修正了錯誤,指出由Tim
這不起作用。它只在'&Eacute;'位於該行的位置2時才匹配。 – 2011-05-03 20:56:28
@Tim你是對的,複製並粘貼錯誤。修復。非常感謝。 – 2011-05-04 06:21:06
現在它只匹配在'&Eacute'之前在同一行上沒有其他HTML實體... – 2011-05-04 06:29:02
如果您在使用Ruby 1.9,你可以使用一個回顧後是這樣的:
t.gsub! /(?<=.)É/, 'é'
在Ruby 1.8,你需要使用類似的方法:
while t =~ /(.)É/
t.sub! /(.)É/, "#{$1}é"
end
其中t是要修改的字符串。
't.gsub! /(?!^)&Eacute; /,'&eacute;'在Ruby 1.8中運行良好。 – 2011-05-04 11:33:21
當你設計一個正則表達式時,你不能使用「發生如」。你在尋找什麼樣的特定模式?它會一直是'&E'嗎?你是否總是把它改成'&e'? – eykanal 2011-05-03 20:34:21
假設我有以下幾行:H&Eacute; llo。我想改變它,所以它是一個小寫的e。但是,如果線條以此開始,我不想更改它,因爲我寧願將其大寫。我正在使用String類的gsub方法進行替換。 – agmcleod 2011-05-03 20:35:36
你想得到什麼? – fl00r 2011-05-03 20:35:58