Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过LINQ中的模式查找动态单词_Linq_Linqpad - Fatal编程技术网

通过LINQ中的模式查找动态单词

通过LINQ中的模式查找动态单词,linq,linqpad,Linq,Linqpad,下面是html的启动方式 商业文件 <p>Some company</p> <p> <p>DEPARTMENT: Legal Process</p> <p>FUNCTION: Computer Department</p> <p>PROCESS: Process Server</p> <p>PROCEDURE: ABC Process Server</p> <

下面是html的启动方式

商业文件

<p>Some company</p>
<p>
<p>DEPARTMENT: Legal Process</p>
<p>FUNCTION: Computer Department</p>
<p>PROCESS: Process Server</p>
<p>PROCEDURE: ABC Process Server</p>
<p>OWNER: Some User</p>
<p>REVISION DATE: 06/10/2013</p>
<p>
<p>OBJECTIVE: To ensure that the process server receive their invoices the following day.</p>
<p>
<p>WHEN TO PERFORM: Daily</p>
<p>
<p>WHO WILL PERFORM? Computer Team</p>
<p>
<p>TIME TO COMPLETE: 5 minutes</p>
<p>
<p>TECHNOLOGY REQUIREMENT(S): </p>
<p>
<p>SOURCE DOCUMENT(S): N/A</p>
<p>
<p>CODES AND DEFINITIONS: N/A</p>
<p>
<table border="1">
  <tr>
    <td>
      <p>KPI&rsquo;s: </p>
    </td>
  </tr>
</table>
<p>
<table border="1">
  <tr>
    <td>
      <p>RISKS:  </p>
    </td>
  </tr>
</table>

它可以用许多LINQ语句完成,但使用时只需要几行代码。

可以用许多LINQ语句完成,但使用时只需要几行代码。

对于HTML,您需要一个HTML解析器。试试看

正则表达式可以处理与HTML的简单匹配,但不足以处理层次结构,查询的精确度也会降低

任何HTML提取都会因为HTML的结构而变得脆弱。HTML是一种表示格式,创建者很少关心机器解释。至少使用解析器,您将获得表示标记的准确模型(假设它是有效的HTML)。您还可以将实体转换为字符,并能够提取元素的所有后代文本,而无需使用粗体或斜体等内部标记元素


只需添加引用,您就可以在LINQPad中使用任意程序集,对于基于表达式的脚本,您可以自动导入指定的名称空间。

对于HTML,您需要一个HTML解析器。试试看

正则表达式可以处理与HTML的简单匹配,但不足以处理层次结构,查询的精确度也会降低

任何HTML提取都会因为HTML的结构而变得脆弱。HTML是一种表示格式,创建者很少关心机器解释。至少使用解析器,您将获得表示标记的准确模型(假设它是有效的HTML)。您还可以将实体转换为字符,并能够提取元素的所有后代文本,而无需使用粗体或斜体等内部标记元素


只需添加引用,您就可以在LINQPad中使用任意程序集,对于基于表达式的脚本,您可以自动导入指定的名称空间。

这个正则表达式在输入数据上非常适合我

(DEPARTMENT|FUNCTION|OBJECTIVE):\s*(?<value>.+)\<
(部门职能目标):\s*(?。+)\<
结果是多个匹配,每个匹配有两组-第一组为键,第二组为值。我只处理了两个案例,但你可以很容易地添加其他案例

要删除这样解析的信息,可以使用此正则表达式执行以下操作

(?\(部门职能目标):\s*)(?。+)(?\)

替换字符串为

${start}${end}

忽略价值

在代码中,这看起来有点像这样(在记事本++中快速键入-可能有小错误)

private static readonly ParseDocRegex=new Regex(@“(?\(?部门|职能|目标):\s*)(?。+)(?\)”,RegexOptions.ExplicitCaptured | RegexOptions.Compiled);

结果中的html中的

让matches=findValuesRegex.Match(html)
哪里匹配,成功
选择新的
{
namesAndValues=来自matches.AsType()中的m
选择新的KeyValuePair(m.Groups[“name”].Value,m.Groups[“Value”].Value),
strippedHtml=ParseDocRegex.Replace(html,${start}${end})
};

这应该会给您提供所需的输出。

这个正则表达式在您的输入数据上对我来说工作得很好

(DEPARTMENT|FUNCTION|OBJECTIVE):\s*(?<value>.+)\<
(部门职能目标):\s*(?。+)\<
结果是多个匹配,每个匹配有两组-第一组为键,第二组为值。我只处理了两个案例,但你可以很容易地添加其他案例

要删除这样解析的信息,可以使用此正则表达式执行以下操作

(?\(部门职能目标):\s*)(?。+)(?\)

替换字符串为

${start}${end}

忽略价值

在代码中,这看起来有点像这样(在记事本++中快速键入-可能有小错误)

private static readonly ParseDocRegex=new Regex(@“(?\(?部门|职能|目标):\s*)(?。+)(?\)”,RegexOptions.ExplicitCaptured | RegexOptions.Compiled);

结果中的html中的

让matches=findValuesRegex.Match(html)
哪里匹配,成功
选择新的
{
namesAndValues=来自matches.AsType()中的m
选择新的KeyValuePair(m.Groups[“name”].Value,m.Groups[“Value”].Value),
strippedHtml=ParseDocRegex.Replace(html,${start}${end})
};

这应该会给您提供所需的输出。

有任何示例吗?以前从未在linqpad中真正混合过regex和linq。有什么例子吗?以前从未在linqpad中真正混合过regex和linq。我对regex很陌生。我编辑了原始帖子,加入了我用来获取结果的LINQ。如何将此正则表达式匹配附加到它?还有什么是${start}${end}除了start/end之外,我还应该在那里放点什么吗?@JamesWilson别忘了将所有命名实体(例如,以及未来数据中可能出现的任何其他实体)转换为字符……或者,你可以使用HTML解析器。我对regex非常陌生。我编辑了原始帖子,加入了我用来获取结果的LINQ。如何将此正则表达式匹配附加到它?还有什么是${start}${end}除了start/end之外,我还需要在这里添加其他内容吗?@JamesWilson不要忘记将所有命名实体(例如,以及将来数据中可能出现的任何其他实体)转换为字符……或者,您可以使用HTML解析器。
private static readonly ParseDocRegex = new Regex(@"(?<start>\<p\>(?<name>DEPARTMENT|FUNCTION|OBJECTIVE):\s*)(?<value>.+)(?<end>\</p\>)", RegexOptions.ExplicitCaptured | RegexOptions.Compiled);
from html in result
    let matches = findValuesRegex.Match(html)
    where matches.Success
    select new
    {
        namesAndValues = from m in matches.AsType<Match>() 
        select new KeyValuePair<string, string>(m.Groups["name"].Value, m.Groups["value"].Value),
        strippedHtml = ParseDocRegex.Replace(html, "${start}${end}")
    };