找回密码
 加入
搜索
查看: 9971|回复: 21

[AU3基础] 怎么提取这里面的东西出来 正则?[已解决]

 火.. [复制链接]
发表于 2011-11-10 17:02:23 | 显示全部楼层 |阅读模式
本帖最后由 kaitou8 于 2011-11-11 11:30 编辑

1   某某    11     13123456789( 某某一) 方的说法
2   某某二   11                             15987654321 某某     辐射防护5198撒旦发
3   某某三   6     13456789123某很多某  413打发218
4   某某某   8     13963852741      某都某       萨芬和技术
5   好哈的   11      13124003652某的某            阿呆发4
6   地方发   10      13950497469 某的某              死雅3典2
7   东方红   11      87123456( 某某雯)                就哦3啊就
8   得以苹   11      87544444某某华                 1发得分
9   的很多豪   10     13644444982       某某友               东23方红23地方
比如 第一行 提取结果  
1
某某
11
13123456789
某某一
方的说法
后面的类似  整个是一文本

(?<=\n\d+\s+)\w+ 比如用这个提取第二个位置的 用下的RegexTester测试正常  到了au3上面就不可以了..

$var=StringRegExp($text,'(?<=\n\d+\s+)\w+',3)
For $i = 0 to UBound($var)-1
          msgbox(0,$i+1,$var[$i])
Next
发表于 2011-11-10 19:28:30 | 显示全部楼层
还是没明白你最终要得到什么样的结果!
 楼主| 发表于 2011-11-10 19:46:11 | 显示全部楼层
还是没明白你最终要得到什么样的结果!
水木子 发表于 2011-11-10 19:28



    就把每一行 分割成
1
某某
11
13123456789
某某一
方的说法
这样的六行
发表于 2011-11-10 20:19:39 | 显示全部楼层
猜的!试试!

Local $z = 1

While 1
        Local $sText = FileReadLine('1.txt', $z)
        If @error = -1 Then ExitLoop
        $sReg = StringRegExpReplace($sText, '(\d+\h+\d+)', '$1' & @CRLF)
        $sReg = StringRegExpReplace($sReg, '\h{2,}', @CRLF)
        MsgBox(0, '', $sReg)
        $z += 1
WEnd

评分

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

查看全部评分

 楼主| 发表于 2011-11-10 20:46:25 | 显示全部楼层
本帖最后由 kaitou8 于 2011-11-10 20:48 编辑
猜的!试试!
水木子 发表于 2011-11-10 20:19



    嗯 大概是这样子 很感谢
我是看http://www.autoitx.com/forum.php ... B%C3%C5%BD%CC%B3%CC
这个里面想弄的
但是里面没有看到\h的说明 刚查stringregexp里面有
还有搜的时候也经常看到$1 这个是什么意思
好像1 最后两项没有分开 其他都可以 还有4 和9 中间多了个空格还是换行的
要是想6个分别输出应该怎么弄
发表于 2011-11-10 20:49:16 | 显示全部楼层
用stringsplit()就行了,空格作为分隔符。
发表于 2011-11-10 20:54:44 | 显示全部楼层
本帖最后由 水木子 于 2011-11-10 20:56 编辑

回复 6# xms77
请注意看
第一行,某某一前面也是有空白符的!
第三行,某很多某前面反而又没有空白符。
发表于 2011-11-10 22:06:18 | 显示全部楼层

使用最笨蛋的方法,匹配每一个地方!但很准确!

本帖最后由 gzh888666 于 2011-11-11 02:09 编辑
#include <Array.au3>
Local $txt=""
Local $Str = _
                '1   某某    11     13123456789( 某某一) 方的说法' & @CRLF & _
                '2   某某二   11  15987654321 某某     辐射防护5198撒旦发' & @CRLF & _
                '3   某某三   6     13456789123某很多某  413打发218' & @CRLF & _
                '4   某某某   8     13963852741      某都某       萨芬和技术' & @CRLF & _
                '5   好哈的   11      13124003652某的某            阿呆发4 ' & @CRLF & _
                '6   地方发   10      13950497469 某的某              死雅3典2' & @CRLF & _
                '7   东方红   11      87123456( 某某雯)                就哦3啊就' & @CRLF & _
                '8   得以苹   11      87544444某某华                 1发得分' & @CRLF & _
                '9   的很多豪   10     13644444982       某某友      东23方红23地方' & @CRLF
Local $Test = StringRegExp($str, '(?s)(\d+)\h+([\x{4e00}-\x{9fff}]+)\h+(\d+)\h+(\d+).*?([\x{4e00}-\x{9fff}]+)[\h+\)].*?(\S+)', 3)
If Not @Error Then _ArrayDisplay($Test, UBound($Test))
For $i = 0 To UBound($Test)-1 Step 6
        For $n=0 To 5
                $txt &= $Test[$i+$n]&"|"
                Next
MsgBox(0,"",StringTrimRight ($txt,1))
$txt=""
Next  

评分

参与人数 1金钱 +20 贡献 +1 收起 理由
lixiaolong + 20 + 1

查看全部评分

发表于 2011-11-11 00:22:41 | 显示全部楼层
试下另类的
#include <Array.au3>
Local $Str = _
                '1   某某    11     13123456789( 某某一) 方的说法' & @CRLF & _
                '2   某某二   11                             15987654321 某某     辐射防护5198撒旦发' & @CRLF & _
                '3   某某三   6     13456789123某很多某  413打发218' & @CRLF & _
                '4   某某某   8     13963852741      某都某       萨芬和技术' & @CRLF & _
                '5   好哈的   11      13124003652某的某            阿呆发4' & @CRLF & _
                '6   地方发   10      13950497469 某的某              死雅3典2' & @CRLF & _
                '7   东方红   11      87123456( 某某雯)                就哦3啊就' & @CRLF & _
                '8   得以苹   11      87544444某某华                 1发得分' & @CRLF & _
                '9   的很多豪   10     13644444982       某某友               东23方红23地方'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '\d{8,}(?=[^\d]+\h)|[^\h\(\)\v]+', 3)
If Not @Error Then 
        _ArrayDisplay($Test, UBound($Test))
        Local $Array[UBound($Test)/6][6]
        For $i=0 to UBound($Test)-1 Step 6
                for $n=0 to 5
                        $Array[$i/6][$n]=$Test[$i+$n]
                Next
        Next
EndIf
_ArrayDisplay($Array)

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
lixiaolong + 30 + 2

查看全部评分

发表于 2011-11-11 06:20:18 | 显示全部楼层
正则越学越深,真是个好东西!
发表于 2011-11-11 06:22:50 | 显示全部楼层
回复 8# gzh888666

请教这个事什么意思?[\x{4e00}-\x{9fff}]
没学过。。
发表于 2011-11-11 06:37:55 | 显示全部楼层
回复  gzh888666

请教这个事什么意思?[\x{4e00}-\x{9fff}]
没学过。。
lixiaolong 发表于 2011-11-11 06:22


我查了,是中日韩汉字的意思吧?
发表于 2011-11-11 08:06:05 | 显示全部楼层
split就可以,一定要用正则么...
发表于 2011-11-11 09:08:47 | 显示全部楼层
试一下弄个ini咋样
发表于 2011-11-11 09:22:19 | 显示全部楼层
我查了,是中日韩汉字的意思吧?
lixiaolong 发表于 2011-11-11 06:37



    差不多这个意思了
也就是Unicode编码中的4e00-9fff归类为“CJK 统一表意符号”,涵盖了绝大多数中文字符。

指定Unicode编码有三种形式:
①  \uxxxx
②  \u{xxxx}
③  \x{xxxx}

其中的xxxx为编码的值,也就是必须有4位16进制数字。
象.NET、Java、JavaScript和Python等就是采用第一种方式的正则表达;而象Ruby等采用第二种方式,而象PHP等采用第三种方式

评分

参与人数 1金钱 +20 贡献 +5 收起 理由
lixiaolong + 20 + 5

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 07:36 , Processed in 0.097830 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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