有人会帮助我为此HTML标签制作regx吗?
<h1 class="c-product__title">
هندزفری بلوتوث مدل HBQ-I7
<span>HBQ-I7 Bluetooth Handsfree</span></h1>
我要提取“ HBQ-I7” 和“ HBQ-I7蓝牙免提”
谢谢
答案 0 :(得分:1)
var source = @"<h1 class=""c-product__title"">هندزفری بلوتوث مدل HBQ-I7<span>HBQ-I7 Bluetooth Handsfree</span></h1>";
var regex = new Regex(@"product__title"">(?<farci>.+)<span>(?<english>.+)</span>");
var match = regex.Match(source);
这将返回3个组,第一个组与整个正则表达式匹配,然后再返回2个组,一个组与波斯人称为farci,第二个组与英语版本称为English。
仅当它们都在同一行时才有效。如果您有换行符,那就行不通了。
如果您可以更轻松地将html视为xml并将Linq用作,则换行符不是问题。
答案 1 :(得分:0)
string html = @"<h1 class=""c-product__title"">
هندزفری بلوتوث مدل HBQ-I7
<span>HBQ-I7 Bluetooth Handsfree</span></h1>";
string h1Start = @"<h1.*?>"; // h1 tag, with or without attributes
string spanStart = @"<span.*?>"; // span tag, with or without attributes
string spanEnd = @"</span>"; // span closing tag
string text = @"\s*(.+)\s*"; // there MIGHT be whitespace before and/or after the text
var regex = new Regex($"{h1Start}{text}{spanStart}{text}{spanEnd}");
Match match = regex.Match(html);
if (match.Success)
{
string persianText = match.Groups[1].Value.Trim();
string englishText = match.Groups[2].Value.Trim();
}
在这种特殊情况下,为了解析HTML片段,HtmlAgilityPack比正则表达式更好。
示例:
using System;
using System.Linq;
using HtmlAgilityPack;
namespace HtmlAgilityPackDemo
{
class Program
{
static void Main(string[] args)
{
string html = @"<h1 class=""c-product__title"">
هندزفری بلوتوث مدل HBQ-I7
<span>HBQ-I7 Bluetooth Handsfree</span></h1>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var text = (from node in doc.DocumentNode.ChildNodes
let textNode = node.SelectSingleNode("//text()") // selects the text
let spanNode = node.SelectSingleNode("span")
select new
{
PersianText = textNode.InnerText.Trim(),
EnglishText = spanNode.InnerText.Trim()
})
.FirstOrDefault();
Console.Read();
}
}
}
答案 2 :(得分:0)
如果在C#代码中将HTMLTag作为字符串获取,则可以尝试使用.split()方法提取所需的/所需的部分。例如:
String htmlTag = " < h1 class=\"c-product__title\"> هندزفری بلوتوث مدل HBQ-I7 <span> HBQ-I7 Bluetooth Handsfree</span></h1>";
string[] htmlTagSplitted = htmlTag.Split('<');
string[] htmlTagSplitted2 = new string[20];
string[] htmlTagSplitted3 = new string[20];
htmlTagSplitted2 = htmlTagSplitted[1].Split('>');
htmlTagSplitted3 = htmlTagSplitted[2].Split('>');
Console.WriteLine(htmlTagSplitted2[1] + htmlTagSplitted3[1]);
htmlTagSplitted2 [1]包含所需字符串的第一部分,而htmlTagSplitted3 [1]包含第二部分。我知道这不是Regex,也不是漂亮的语法,但是它确实可以做到:-D
最好的问候尼科!