kaitou8 发表于 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

还是没明白你最终要得到什么样的结果!

kaitou8 发表于 2011-11-10 19:46:11

还是没明白你最终要得到什么样的结果!
水木子 发表于 2011-11-10 19:28 http://www.autoitx.com/images/common/back.gif


    就把每一行 分割成
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

kaitou8 发表于 2011-11-10 20:46:25

本帖最后由 kaitou8 于 2011-11-10 20:48 编辑

猜的!试试!
水木子 发表于 2011-11-10 20:19 http://www.autoitx.com/images/common/back.gif


    嗯 大概是这样子 很感谢
我是看http://www.autoitx.com/forum.php?mod=viewthread&tid=2925&highlight=%D5%FD%D4%F2%B1%ED%B4%EF%CA%BD30%B7%D6%D6%D3%C8%EB%C3%C5%BD%CC%B3%CC
这个里面想弄的
但是里面没有看到\h的说明 刚查stringregexp里面有{:face (189):}
还有搜的时候也经常看到$1 这个是什么意思
好像1 最后两项没有分开 其他都可以 还有4 和9 中间多了个空格还是换行的
要是想6个分别输出应该怎么弄

xms77 发表于 2011-11-10 20:49:16

用stringsplit()就行了,空格作为分隔符。

水木子 发表于 2011-11-10 20:54:44

本帖最后由 水木子 于 2011-11-10 20:56 编辑

回复 6# xms77
请注意看
第一行,某某一前面也是有空白符的!
第三行,某很多某前面反而又没有空白符。

gzh888666 发表于 2011-11-10 22:06:18

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

本帖最后由 gzh888666 于 2011-11-11 02:09 编辑

#include <Array.au3>
Local $txt=""
Local $Str = _
                '1   某某    11   13123456789( 某某一) 方的说法' & @CRLF & _
                '2   某某二   1115987654321 某某   辐射防护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

3mile 发表于 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
        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)

lixiaolong 发表于 2011-11-11 06:20:18

正则越学越深,真是个好东西!

lixiaolong 发表于 2011-11-11 06:22:50

回复 8# gzh888666

请教这个事什么意思?[\x{4e00}-\x{9fff}]
没学过。。

lixiaolong 发表于 2011-11-11 06:37:55

回复gzh888666

请教这个事什么意思?[\x{4e00}-\x{9fff}]
没学过。。
lixiaolong 发表于 2011-11-11 06:22 http://www.autoitx.com/images/common/back.gif

我查了,是中日韩汉字的意思吧?

sour 发表于 2011-11-11 08:06:05

split就可以,一定要用正则么...

xz00311 发表于 2011-11-11 09:08:47

试一下弄个ini咋样

happytc 发表于 2011-11-11 09:22:19

我查了,是中日韩汉字的意思吧?
lixiaolong 发表于 2011-11-11 06:37 http://www.autoitx.com/images/common/back.gif


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

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

其中的xxxx为编码的值,也就是必须有4位16进制数字。
象.NET、Java、JavaScript和Python等就是采用第一种方式的正则表达;而象Ruby等采用第二种方式,而象PHP等采用第三种方式
页: [1] 2
查看完整版本: 怎么提取这里面的东西出来 正则?[已解决]