找回密码
 加入
搜索
查看: 10317|回复: 25

[效率算法] 关于正则,我真的投降,快来帮帮我~`

 火.. [复制链接]
发表于 2012-3-18 09:53:59 | 显示全部楼层 |阅读模式
本帖最后由 tttbbb999 于 2012-3-18 11:11 编辑
<tr>
        <td>a1</td>
    <td>a1.exe</td>
        <td>9</td>
        <td>250</td>
        <td>2</td>
    
    </tr>        
  
    <tr>
        <td>a2</td>
    <td>a2.exe</td>
        <td>8</td>
        <td>250</td>
        <td>2</td>
    
    </tr>
;====================
$var[0][0] = 2
$var[1][0] = a1
$var[1][1] = a1.exe
$var[1][2] = 9
$var[1][3] = 250
$var[1][4] = 2
$var[2][0] = a2
$var[2][1] = a2.exe
$var[2][2] = 8
$var[2][3] = 250
$var[2][4] = 2
要怎么写呀。头疼。


==============================
提取后字符串为: <td>a1</td><td>a1.exe</td><td>9</td><td>250</td><td>2</td>
                     : <td>a1</td><td>a1.exe</td><td>9</td><td>250</td><td>2</td>
2个字符串,用于再次提取。


;================================
谢谢你们大家了。。我换了个思路:
        $result = StringRegExpReplace($soure, "\s*","") ;替换掉空格
        $result2 = StringRegExp($result,"<tr>(.*?)</tr>",3) ;分组
                 _ArrayDisplay($result2)
后面可以再用正则检查一次,就可以写进2维数组了。
发表于 2012-3-18 10:15:45 | 显示全部楼层
<td>(.*)</td>
发表于 2012-3-18 10:20:58 | 显示全部楼层
[^<>]+?(?=\<)
 楼主| 发表于 2012-3-18 10:46:47 | 显示全部楼层
[^]+?(?=\
kevinch 发表于 2012-3-18 10:20



    能把空白忽略掉吗?
发表于 2012-3-18 10:51:46 | 显示全部楼层
#include <Array.au3>
$Str = _
'<tr>' & @CRLF & _
'        <td>a1</td>' & @CRLF & _
'    <td>a1.exe</td>' & @CRLF & _
'        <td>9</td>' & @CRLF & _
'        <td>250</td>' & @CRLF & _
'        <td>2</td>' & @CRLF & _
'    ' & @CRLF & _
'    </tr>        ' & @CRLF & _
'  ' & @CRLF & _
'    <tr>' & @CRLF & _
'        <td>a2</td>' & @CRLF & _
'    <td>a2.exe</td>' & @CRLF & _
'        <td>8</td>' & @CRLF & _
'        <td>250</td>' & @CRLF & _
'        <td>2</td>' & @CRLF & _
'    ' & @CRLF & _
'    </tr>' & @CRLF & _
''
$array = StringRegExp($Str, '<(?i)td>(.*?)</(?i)td>', 3)
_ArrayDisplay($array, "匹配结果")

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

发表于 2012-3-18 11:04:04 | 显示全部楼层
#include <Array.au3>
Local $Str = _
                '<tr>' & @CRLF & @CRLF & _
                '        <td>a1     </td>' & @CRLF & @CRLF & _
                '    <Td>      a1.exe</tD>' & @CRLF & @CRLF & _
                '        <td>9 </td>' & @CRLF & @CRLF & _
                '        <td>250  </td>' & @CRLF & @CRLF & _
                '        <td> 2</td>' & @CRLF & @CRLF & _
                '    ' & @CRLF & @CRLF & _
                '    </tr>        ' & @CRLF & @CRLF & _
                '  ' & @CRLF & @CRLF & _
                '    <tr>' & @CRLF & @CRLF & _
                '        <td> a2</td>' & @CRLF & @CRLF & _
                '    <td>a2.exe </td>' & @CRLF & @CRLF & _
                '        <td>8</td>' & @CRLF & @CRLF & _
                '        <td>250</td>' & @CRLF & @CRLF & _
                '        <td>2</td>' & @CRLF & @CRLF & _
                '    ' & @CRLF & @CRLF & _
                '    </tr>' & @CRLF & @CRLF
MsgBox(0, '原字符串', $Str)

Local $Test = StringRegExp($str, '(?i)<td>\s*([^<\s]+)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中[0]元素为: ' & $Test[0])
_ArrayDisplay($Test, UBound($Test))

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

 楼主| 发表于 2012-3-18 11:14:37 | 显示全部楼层
感谢了,实际数量会更多,这样的话数据不好分类。得用二维数组才行。
已经想到办法了,见顶楼,感谢大家。
发表于 2012-3-18 11:20:37 | 显示全部楼层
原来是这个意思,是我没看明白楼主的意思.
发表于 2012-3-18 11:42:30 | 显示全部楼层
lixiaolong 发表于 2012-3-18 11:04


为什么每行用两个@CRLF呢
    & @CRLF & @CRLF & _
发表于 2012-3-18 11:59:42 | 显示全部楼层
回复 9# zldfsz

直接复制一楼的字符串后用Au3.REHelper转换就这样了...
发表于 2012-3-18 12:16:30 | 显示全部楼层
点击“复制代码”才不会增加多余的空行,呵呵
发表于 2012-3-18 12:31:43 | 显示全部楼层
回复  zldfsz

直接复制一楼的字符串后用Au3.REHelper转换就这样了...
lixiaolong 发表于 2012-3-18 11:59



   
点击“复制代码”才不会增加多余的空行,呵呵
afan 发表于 2012-3-18 12:16



    怪不得呢,我说我转的就没有。。。不过我之前还真没注意Au3.REHelper可以直接转换生成,我之前还用的 txt2au3转为字符串呢,呵呵见笑了
发表于 2012-3-18 12:36:30 | 显示全部楼层
本帖最后由 shqf 于 2012-3-18 12:47 编辑

给出我的方法,如下:(1.txt为字符串所在的文件,如实际<tr>、<td>块多的话,加大数组定义)
#include <Array.au3>
Local $Array[3][5]
$File = FileOpen(@ScriptDir & "\1.txt", 0)
$Var = FileRead($File)
$tr = StringRegExp($Var, "<tr>([\s\S]+?)</tr>", 3)
$Array[0][0] = UBound($tr)
For $i = 0 To UBound($tr)-1
        $td = StringRegExp($tr[$i], "<td>([\s\S]+?)</td>", 3)
        For $n = 0 To UBound($td) - 1
                $Array[$i+1][$n] = $td[$n]
        Next
Next
FileClose($file)
_ArrayDisplay($Array)

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

发表于 2012-3-18 12:38:44 | 显示全部楼层
回复 12# zldfsz


    唉,很多功能其实都是因为没看帖子说明,所以,我现在已不作详细介绍了
发表于 2012-3-18 12:59:18 | 显示全部楼层
回复 14# afan


    因为平时都主要用于测试表达式的结果,所以就没。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-18 08:35 , Processed in 0.090510 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表