奥斯丁 发表于 2012-4-26 08:07:23

求正则 [已解决]

本帖最后由 奥斯丁 于 2012-4-29 01:06 编辑

求正则,太难入门了。
把问题修改了一下............
问题如下:一串字符,这中间有空格分隔的, 而且空格前的字符必须是整数才是我想提取的串 ( 该串的中间没有空格的就为放弃,仅仅在串的末尾的带空格的也放弃。)
          上述条件成立的话:    1:求取第一个空格前的整数的正则 ,2:同时用正则求取空格后的第一个字符(用来判断是否为h或p来决定分别调用不同的进程) . 如:
11 23pphh    =11   2      不是h 或p
22 p9944      =22   p
-33 sdfh77    = -33s      不是h 或p
44dfghdfh   =                放弃
55               =                放弃 (注: 即使55 的后面带空格也要放弃)
66pp66ph   =                放弃   空格前的字符必须是整数

这下该清楚明白了, 有请大侠.........

    补充:问题1 已经解决, 求正则问题2.

shqf 发表于 2012-4-26 09:13:19

难以理解"求第一个空格前的正负整数"、"该串也可能没有空格的取值就为空了"唉,是否我的汉语言文学水平太差了呢?至少搞个例子吧,让人容易理解一点吧。

3mile 发表于 2012-4-26 10:24:26

(?m)^[+-]*\d*\.*\d+\b(?=\h)

xms77 发表于 2012-4-26 12:41:18

回复 1# 奥斯丁
文字描述还不如上字符串和要取什么

whitehead 发表于 2012-4-26 19:35:01

举一个字符串的例子吧

whitehead 发表于 2012-4-26 20:10:49

楼上到处灌水,可能还得被扣分吧

lixiaolong 发表于 2012-4-26 20:22:42

不太懂什么意思,只能猜.
Local $Str = 'aaaa+1234 bbbb-4321 cccc+6666'
Local $Test = StringRegExp($Str, '([-+]?\d+)\s.+', 1)
If Not @error Then MsgBox(0, '', '原字符串: ' & $Str & @CRLF & '匹配结果: ' & $Test)

奥斯丁 发表于 2012-4-27 21:35:40

本帖最后由 奥斯丁 于 2012-4-28 02:08 编辑

手机上发上来的问题,说的有点不清楚, 呵呵.....
问题如下:一串字符,这中间有空格分隔的, 而且空格前的字符必须是整数才是我想提取的串 ,   1:求取第一个空格前的整数的正则 ,2:求取空格后的第一个字符并判断是否为h或p .( 该串的中间没有空格的就为放弃,仅仅在串的末尾的带空格的也放弃。)
如:
11 23pphh    =11   2不是h 或p
22 p9944      =22   p
-33 sdfh77   = -33s不是h 或p
44dfghdfh    = 放弃
55                =放弃 (注: 即使55 的后面带空格也要放弃)
66pp66hh66pphh =放弃   空格前的字符必须是整数

这下该清楚明白了, 有请大侠.........

whitehead 发表于 2012-4-27 21:59:01

本帖最后由 whitehead 于 2012-4-27 22:31 编辑

问题1
$Test = StringRegExp($Str, '(?m)^(-?\d+)\s+\w+', 1)

whitehead 发表于 2012-4-27 22:05:35

本帖最后由 whitehead 于 2012-4-27 22:32 编辑

问题2
在问题1有解时
$Test = StringRegExp($Str, '(?m)^-?\d+\s+(h|p).*', 1)

奥斯丁 发表于 2012-4-27 22:12:20

问题1
$Test = StringRegExp($Str, '^(-?\d+)\s+\w+', 1)
whitehead 发表于 2012-4-27 21:59 http://www.autoitx.com/images/common/back.gif


    3q !
问题2   同样求正则取第一个字符

whitehead 发表于 2012-4-27 22:18:08

3q !
问题2   同样求正则取第一个字符
奥斯丁 发表于 2012-4-27 22:12 http://www.autoitx.com/images/common/back.gif

10楼匹配时就取空格后第一个字符h或p

奥斯丁 发表于 2012-4-27 23:37:12

不是很明白 ls 的意思, 我试过用 以指定分隔符把字符串拆分成若干子串 的方法有可能发生遗漏(不是很肯定是哪里的问题,遗漏肯定是发生了), 所以想用正则的办法代替, 确定这部分没有问题. ..还望详细的命令, 毕竟是正则, 头大.........

user3000 发表于 2012-4-28 00:18:42

回复 8# 奥斯丁 #include <array.au3>
Local $Str = '11 23pphh    =11' & @CRLF & _;   2不是h 或p
'22 p9944      =22'   & @CRLF & _ ; p
'-33 sdfh77   = -33'& @CRLF & _   ;s不是h 或p
'44dfghdfh    = 放弃' & @CRLF & _
'55                ='   & @CRLF & _    ;'放弃 (注: 即使55 的后面带空格也要放弃)
'66pp66hh66pphh =放弃'; 空格前的字符必须是±整数
$f = stringregExp($Str, '(?<=[\r\n\h^])([+\-]?\d+)\h+(?=)', 3)
If Not @errorThen _arraydisplay($f)有空, 也把1楼的发言好好编辑一下吧???

奥斯丁 发表于 2012-4-28 02:25:38

本帖最后由 奥斯丁 于 2012-4-28 02:33 编辑

问题2是求第一个字符,h和p是分别调用不同的进程的
页: [1] 2 3 4
查看完整版本: 求正则 [已解决]