用xpath在python中搜索硬代码

2024-10-04 01:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一堆python模块中找到硬编码字符串,如电子邮件、路径或服务器名(在本例中只是电子邮件)。 我试着检查所有字典、列表和属性,看它们是否包含“mail”,然后检查它们是否包含字符串。虽然我得到了所有硬编码的邮件,但我也得到了邮件列表,它不是硬编码的,而是有qoutes的。你知道吗

//TESTLIST_STAR_EXPR[contains(@tokenValue,"mail")]/..//STRING[contains(@tokenValue,"'")]

以下是从python模块解析的xml示例:

<FILE_INPUT tokenValue="import" tokenLine="7" tokenColumn="0">
  <STATEMENT tokenValue="import" tokenLine="7" tokenColumn="0">
    <STMT_LIST tokenValue="import" tokenLine="7" tokenColumn="0">
      <SIMPLE_STMT tokenValue="import" tokenLine="7" tokenColumn="0">
        <IMPORT_STMT tokenValue="import" tokenLine="7" tokenColumn="0">
          <IMPORT_NAME tokenValue="import" tokenLine="7" tokenColumn="0">
            <IMPORT tokenValue="import" tokenLine="7" tokenColumn="0"/>
            <DOTTED_AS_NAMES tokenValue="mails" tokenLine="7" tokenColumn="7">
              <DOTTED_AS_NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
                <DOTTED_NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
                  <NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
                    <IDENTIFIER tokenValue="mails" tokenLine="7" tokenColumn="7"/>
                  </NAME>
                </DOTTED_NAME>
              </DOTTED_AS_NAME>
            </DOTTED_AS_NAMES>
          </IMPORT_NAME>
        </IMPORT_STMT>
      </SIMPLE_STMT>
    </STMT_LIST>
    <NEWLINE tokenValue="
" tokenLine="7" tokenColumn="12"/>
  </STATEMENT>
  <STATEMENT tokenValue="serverList" tokenLine="10" tokenColumn="0">
    <STMT_LIST tokenValue="serverList" tokenLine="10" tokenColumn="0">
      <SIMPLE_STMT tokenValue="serverList" tokenLine="10" tokenColumn="0">
        <EXPRESSION_STMT tokenValue="serverList" tokenLine="10" tokenColumn="0">
          <TESTLIST_STAR_EXPR tokenValue="serverList" tokenLine="10" tokenColumn="0">
            <TEST tokenValue="serverList" tokenLine="10" tokenColumn="0">
              <ATOM tokenValue="serverList" tokenLine="10" tokenColumn="0">
                <NAME tokenValue="serverList" tokenLine="10" tokenColumn="0">
                  <IDENTIFIER tokenValue="serverList" tokenLine="10" tokenColumn="0"/>
                </NAME>
              </ATOM>
            </TEST>
          </TESTLIST_STAR_EXPR>
          <ASSIGN tokenValue="=" tokenLine="10" tokenColumn="11"/>
          <TESTLIST_STAR_EXPR tokenValue="[" tokenLine="10" tokenColumn="13">
            <TEST tokenValue="[" tokenLine="10" tokenColumn="13">
              <ATOM tokenValue="[" tokenLine="10" tokenColumn="13">
                <LBRACKET tokenValue="[" tokenLine="10" tokenColumn="13"/>
                <TESTLIST_COMP tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
                  <TEST tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
                    <ATOM tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
                      <STRING tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14"/>
                    </ATOM>
                  </TEST>
                </TESTLIST_COMP>
                <RBRACKET tokenValue="]" tokenLine="10" tokenColumn="34"/>
              </ATOM>
            </TEST>
          </TESTLIST_STAR_EXPR>
        </EXPRESSION_STMT>
      </SIMPLE_STMT>
    </STMT_LIST>
    <NEWLINE tokenValue="
" tokenLine="10" tokenColumn="35"/>
  </STATEMENT>
  <STATEMENT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
    <STMT_LIST tokenValue="mailDic" tokenLine="12" tokenColumn="0">
      <SIMPLE_STMT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
        <EXPRESSION_STMT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
          <TESTLIST_STAR_EXPR tokenValue="mailDic" tokenLine="12" tokenColumn="0">
            <TEST tokenValue="mailDic" tokenLine="12" tokenColumn="0">
              <ATOM tokenValue="mailDic" tokenLine="12" tokenColumn="0">
                <NAME tokenValue="mailDic" tokenLine="12" tokenColumn="0">
                  <IDENTIFIER tokenValue="mailDic" tokenLine="12" tokenColumn="0"/>
                </NAME>
              </ATOM>
            </TEST>
          </TESTLIST_STAR_EXPR>
          <ASSIGN tokenValue="=" tokenLine="12" tokenColumn="8"/>
          <TESTLIST_STAR_EXPR tokenValue="{" tokenLine="12" tokenColumn="10">
            <TEST tokenValue="{" tokenLine="12" tokenColumn="10">
              <ATOM tokenValue="{" tokenLine="12" tokenColumn="10">
                <LCURLYBRACE tokenValue="{" tokenLine="12" tokenColumn="10"/>
                <DICTORSETMAKER tokenValue="'John'" tokenLine="12" tokenColumn="12">
                  <TEST tokenValue="'John'" tokenLine="12" tokenColumn="12">
                    <ATOM tokenValue="'John'" tokenLine="12" tokenColumn="12">
                      <STRING tokenValue="'John'" tokenLine="12" tokenColumn="12"/>
                    </ATOM>
                  </TEST>
                  <COLON tokenValue=":" tokenLine="12" tokenColumn="19"/>
                  <TEST tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21">
                    <ATOM tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21">
                      <STRING tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21"/>
                    </ATOM>
                  </TEST>
                </DICTORSETMAKER>
                <RCURLYBRACE tokenValue="}" tokenLine="12" tokenColumn="41"/>
              </ATOM>
            </TEST>
          </TESTLIST_STAR_EXPR>
        </EXPRESSION_STMT>
      </SIMPLE_STMT>
    </STMT_LIST>
    <NEWLINE tokenValue="
" tokenLine="12" tokenColumn="42"/>
  </STATEMENT>
  <STATEMENT tokenValue="selection" tokenLine="14" tokenColumn="0">
    <STMT_LIST tokenValue="selection" tokenLine="14" tokenColumn="0">
      <SIMPLE_STMT tokenValue="selection" tokenLine="14" tokenColumn="0">
        <EXPRESSION_STMT tokenValue="selection" tokenLine="14" tokenColumn="0">
          <TESTLIST_STAR_EXPR tokenValue="selection" tokenLine="14" tokenColumn="0">
            <TEST tokenValue="selection" tokenLine="14" tokenColumn="0">
              <ATOM tokenValue="selection" tokenLine="14" tokenColumn="0">
                <NAME tokenValue="selection" tokenLine="14" tokenColumn="0">
                  <IDENTIFIER tokenValue="selection" tokenLine="14" tokenColumn="0"/>
                </NAME>
              </ATOM>
            </TEST>
          </TESTLIST_STAR_EXPR>
          <ASSIGN tokenValue="=" tokenLine="14" tokenColumn="10"/>
          <TESTLIST_STAR_EXPR tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
            <TEST tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
              <M_EXPR tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
                <ATOM tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
                  <STRING tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12"/>
                </ATOM>
                <MOD tokenValue="%" tokenLine="14" tokenColumn="23"/>
                <POWER tokenValue="mails" tokenLine="14" tokenColumn="24">
                  <ATOM tokenValue="mails" tokenLine="14" tokenColumn="24">
                    <NAME tokenValue="mails" tokenLine="14" tokenColumn="24">
                      <IDENTIFIER tokenValue="mails" tokenLine="14" tokenColumn="24"/>
                    </NAME>
                  </ATOM>
                  <TRAILER tokenValue="." tokenLine="14" tokenColumn="29">
                    <DOT tokenValue="." tokenLine="14" tokenColumn="29"/>
                    <NAME tokenValue="Emails" tokenLine="14" tokenColumn="30">
                      <IDENTIFIER tokenValue="Emails" tokenLine="14" tokenColumn="30"/>
                    </NAME>
                  </TRAILER>
                </POWER>
              </M_EXPR>
            </TEST>
          </TESTLIST_STAR_EXPR>
        </EXPRESSION_STMT>
      </SIMPLE_STMT>
    </STMT_LIST>
  </STATEMENT>
  <EOF tokenValue="EOF" tokenLine="14" tokenColumn="36"/>
</FILE_INPUT>

问题是我想从mailDic字典中获取条目,而不是从选择中获取条目。你知道吗


Tags: nameteststarstatementatomexprstmtmails
1条回答
网友
1楼 · 发布于 2024-10-04 01:28:37

你写道:

Although I get all hardcoded mails, I also get mailList, which are not hardcoded, but have qoutes in the line.

给定输入数据,当前表达式返回:

<STRING tokenColumn="12" tokenLine="12" tokenValue="'John'"/>
<STRING tokenColumn="21" tokenLine="12" tokenValue="'john.e@hotmail.com'"/>
<STRING tokenColumn="12" tokenLine="14" tokenValue="'mails=s%'"/>

“mailList”一词不会出现在您的数据中,但是如果我假设它位于当前显示为“mailDic”的位置,那么您可以使用以下方法修复它:

//TESTLIST_STAR_EXPR[
    contains(@tokenValue,"mail") 
    and not(@tokenValue = 'mailList')]
/..
//STRING[contains(@tokenValue,"'")]

如果要过滤掉原始输入中的s%,可以使用以下方法:

//TESTLIST_STAR_EXPR[contains(@tokenValue,"mail")]
/..
//STRING[
    contains(@tokenValue,"'")
    and not contains(@tokenValue, 's%')]

否则,请用与您的问题匹配的输入更新您的问题,因为它会使来自that link I gave you的“可验证”失败,也就是说,我看不出哪里出错了,因为它是正确的;)。你知道吗

相关问题 更多 >