正则表达式 |记事本 |搜索具有指定内容的整个 XML 标记并选择它



使用下面的正则表达式,我得到了单个XML元素"lesson"。

(.*?)<lesson id=(.*)[sS]*?</lesson>

但是我如何搜索具有特定内容的 XML 元素并在记事本++中标记整个 XML 元素"课程",从而我可以将 XML 元素复制到另一个文件中。

查找并标记具有以下内容的 XML 元素"课程":

<assigned_day>5</assigned_day>

XML 示例

<lesson id="LS_18300">
  <periods>2</periods>
  <lesson_subject id="SU_Gs"/>
  <lesson_teacher id="TR_Kl"/>
  <lesson_classes id="CL_MM4A"/>
  <teacher_value>200000</teacher_value>
  <effectivebegindate>20170814</effectivebegindate>
  <effectiveenddate>20180706</effectiveenddate>
  <block>2</block>
  <occurence>11111FF11111FF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF1111FFF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF11111FF11111FF1111FFFF1111FFFFFFFFFFFFFFFF11111FF1F111FF111FFFF11111FFF1111FF11111FF11111FF11111FF11111FF11111FF1111F</occurence>
  <times>
    <time>
      <assigned_day>1</assigned_day>
      <assigned_period>10</assigned_period>
      <assigned_starttime>1520</assigned_starttime>
      <assigned_endtime>1605</assigned_endtime>
      <assigned_room id="RM_E13"/>
    </time>
    <time>
      <assigned_day>1</assigned_day>
      <assigned_period>11</assigned_period>
      <assigned_starttime>1615</assigned_starttime>
      <assigned_endtime>1700</assigned_endtime>
      <assigned_room id="RM_E13"/>
    </time>
  </times>
</lesson>
<lesson id="LS_18400">
  <periods>1</periods>
  <lesson_subject id="SU_Finw"/>
  <lesson_teacher id="TR_Cp"/>
  <lesson_classes id="CL_MM4B"/>
  <teacher_value>100000</teacher_value>
  <effectivebegindate>20170814</effectivebegindate>
  <effectiveenddate>20180706</effectiveenddate>
  <occurence>11111FF11111FF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF1111FFF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF11111FF11111FF1111FFFF1111FFFFFFFFFFFFFFFF11111FF1F111FF111FFFF11111FFF1111FF11111FF11111FF11111FF11111FF11111FF1111F</occurence>
  <times>
    <time>
      <assigned_day>4</assigned_day>
      <assigned_period>5</assigned_period>
      <assigned_starttime>1100</assigned_starttime>
      <assigned_endtime>1145</assigned_endtime>
      <assigned_room id="RM_113"/>
    </time>
  </times>
</lesson>
<lesson id="LS_23200">
  <periods>3</periods>
  <lesson_subject id="SU_W+G"/>
  <lesson_teacher id="TR_Mü"/>
  <lesson_classes id="CL_E3B"/>
  <teacher_value>300000</teacher_value>
  <effectivebegindate>20170814</effectivebegindate>
  <effectiveenddate>20180706</effectiveenddate>
  <block>3</block>
  <occurence>11111FF11111FF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF1111FFF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF11111FF11111FF1111FFFF1111FFFFFFFFFFFFFFFF11111FF1F111FF111FFFF11111FFF1111FF11111FF11111FF11111FF11111FF11111FF1111F</occurence>
  <times>
    <time>
      <assigned_day>4</assigned_day>
      <assigned_period>3</assigned_period>
      <assigned_starttime>0910</assigned_starttime>
      <assigned_endtime>0955</assigned_endtime>
      <assigned_room id="RM_E14"/>
    </time>
    <time>
      <assigned_day>4</assigned_day>
      <assigned_period>4</assigned_period>
      <assigned_starttime>1010</assigned_starttime>
      <assigned_endtime>1055</assigned_endtime>
      <assigned_room id="RM_E14"/>
    </time>
    <time>
      <assigned_day>4</assigned_day>
      <assigned_period>5</assigned_period>
      <assigned_starttime>1100</assigned_starttime>
      <assigned_endtime>1145</assigned_endtime>
      <assigned_room id="RM_E14"/>
    </time>
  </times>
</lesson>
<lesson id="LS_25000">
  <periods>2</periods>
  <lesson_subject id="SU_De"/>
  <lesson_teacher id="TR_Bt"/>
  <lesson_classes id="CL_M3A"/>
  <teacher_value>200000</teacher_value>
  <effectivebegindate>20170814</effectivebegindate>
  <effectiveenddate>20180706</effectiveenddate>
  <block>2</block>
  <occurence>11111FF11111FF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF1111FFF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF11111FF11111FF1111FFFF1111FFFFFFFFFFFFFFFF11111FF1F111FF111FFFF11111FFF1111FF11111FF11111FF11111FF11111FF11111FF1111F</occurence>
  <times>
    <time>
      <assigned_day>5</assigned_day>
      <assigned_period>3</assigned_period>
      <assigned_starttime>0910</assigned_starttime>
      <assigned_endtime>0955</assigned_endtime>
      <assigned_room id="RM_226"/>
    </time>
    <time>
      <assigned_day>5</assigned_day>
      <assigned_period>4</assigned_period>
      <assigned_starttime>1010</assigned_starttime>
      <assigned_endtime>1055</assigned_endtime>
      <assigned_room id="RM_226"/>
    </time>
  </times>
</lesson>
<lesson id="LS_25200">
  <periods>2</periods>
  <lesson_subject id="SU_FRW"/>
  <lesson_teacher id="TR_Md"/>
  <lesson_classes id="CL_M3A"/>
  <teacher_value>200000</teacher_value>
  <effectivebegindate>20170814</effectivebegindate>
  <effectiveenddate>20180706</effectiveenddate>
  <block>2</block>
  <occurence>11111FF11111FF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF1111FFF11111FF11111FF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FFFFFFFFFFFFFFFF11111FF11111FF11111FF11111FF11111FF11111FF1111FFFF1111FFFFFFFFFFFFFFFF11111FF1F111FF111FFFF11111FFF1111FF11111FF11111FF11111FF11111FF11111FF1111F</occurence>
  <times>
    <time>
      <assigned_day>4</assigned_day>
      <assigned_period>1</assigned_period>
      <assigned_starttime>0730</assigned_starttime>
      <assigned_endtime>0815</assigned_endtime>
      <assigned_room id="RM_114"/>
    </time>
    <time>
      <assigned_day>4</assigned_day>
      <assigned_period>2</assigned_period>
      <assigned_starttime>0820</assigned_starttime>
      <assigned_endtime>0905</assigned_endtime>
      <assigned_room id="RM_114"/>
    </time>
  </times>
</lesson>

一次尝试是这样的:

(.*?)<lesson id=(.*)[sS]*?(assigned_day>5)?</lesson>

你可以试试这个正则表达式:

<lessons+id[^>]*>(?=(?:(?!</lesson>).)*<assigned_day>5</assigned_day>).*?</lesson>

PS:确保在记事本++编辑器中选中._matches换行

演示

最新更新