我有這樣的HTML正則表達式匹配的行
<br />
<strong>Name:</strong> Josef
<br />
我想的名字,「約瑟夫」,在這種情況下,比賽的最後一個字。 我有一些問題,因爲約瑟夫是該字符串的最後一個字,如果你不使用m和正則表達式。 我的方法
^<strong>Name:</strong> (.*?)$
似乎沒有工作,這是如何正確完成的?
我有這樣的HTML正則表達式匹配的行
<br />
<strong>Name:</strong> Josef
<br />
我想的名字,「約瑟夫」,在這種情況下,比賽的最後一個字。 我有一些問題,因爲約瑟夫是該字符串的最後一個字,如果你不使用m和正則表達式。 我的方法
^<strong>Name:</strong> (.*?)$
似乎沒有工作,這是如何正確完成的?
如果你的HTML字符串有兩個文本換行,就象一個作爲它似乎,你需要設置你的正則表達式爲multiline mode,這樣$
匹配end-of-line
以及end-of-string
。
親愛的Matthias Waldkircher,
兩種解決方案:
1)使用表達式:
"(?:^|\n)<strong>Name:</strong> (.*?)(?:$|\r)"
2)同其他表達:
"</strong>\s(.*?)(?:\r|$)"
在你所希望的兩種溶液匹配將成爲匹配對象match.Groups [1] .Value的這個道具中的一個。使用
MetaChars:
(?:) // unamed/unumered group;
\n // new line;
\r // carriage return;
^ // beginning of the input;
| // or
() // numered group,
$ // end of the input.
我想你最好的,
真誠,
你可以用它找到一個位置以下的前綴這個正則表達式:
(?<=prefix)find
在你的情況下
(?<=^<strong>Name:</strong>).*$
它會找到確切的「約瑟夫」,你將不需要使用組。但考慮使用HTML來搜索Html Agility Pack。
如果你只想約瑟夫爲什麼不使用RightToLeft正則表達式選項給解析器一個提示開始和結束,並開始工作。該模式仍然是從左向右,並將其轉換到這一點:
string data [email protected]"
<br />
<strong>Name:</strong> Josef
<br />
";
string pattern = @"\</strong\>\s+([^\r\n]+)";
// Put in | | to show no whitespace leakage.
Console.WriteLine ("|{0}|", Regex.Match(data, pattern, RegexOptions.RightToLeft).Groups[1].Value);
// Outputs
// |Josef|
而不是使用多模式,使其錨工作的權利,我想溝錨:
<strong>Name:</strong>\s*([^\r\n<]+)
HTML是不是基於行的格式,因此在其中使用行錨並沒有意義。這段文字今天可能會在自己的路線上,但明天它可以被編輯並刪除換行符;它仍然是有效的HTML,它仍然會呈現完全相同。
另一個潛在的問題是換行符可能是\r\n
(回車+換行符)而不是\n
。 .NET正則表達式不會將\r
識別爲行分隔符(的一部分),因此$
將匹配\r
和\n
之間的位置,並且\r
將與名稱(即"Josef\r"
)一起被捕獲。
你的HTML的所有三行都在單個'string'變量中嗎? '
'標籤之前/之後是否有文字換行符? – Rawling
你可以告訴我們更多的'html'..'regex'不推薦用於解析'html' ..你的'擴展html'我們可以建議你一些其他的解決方法.. html是不夠的.. – Anirudha