killunix 发表于 2010-7-15 11:10:02

正则求解

         北大街
             |
西大街---中央广场---东大街
             |
         南大街 如上,把这5个地名抓下来怎么写

[ 本帖最后由 killunix 于 2010-7-15 11:12 AM 编辑 ]

sports 发表于 2010-7-15 14:16:35

不知道换行是不是\n,如果是的话,用下面这个正则匹配
\s*(\S*)\s*\\n\s*([^\s-]*)-{3}([^\s-]*)-{3}(\S*)\s*\\n\s*(\S*)\s*\\n
$1~$5顺序代表这五个地名

hba 发表于 2010-7-26 13:42:53

Mush太强大了,我找到答案了。文若你看看:

<triggers>
<trigger
   enabled="y"
   group="Multi Line"
   lines_to_match="5"
   keep_evaluating="y"
   match="                           北大街            \n                           |   \n               西大街\-\-\-中央广场\-\-\-东大街    \n                           |   \n                           南大街            \Z"
   multi_line="y"
   regexp="y"
   sequence="100"
>
<send>laugh</send>
</trigger>
</triggers>



效果:
                           北大街            
                           |   
               西大街---中央广场---东大街   
                           |   
                           南大街            
laugh
中央广场 -
    这里是城市的正中心,一个很宽阔的广场,铺着青石地面。一些游手好闲的   
人在这里溜溜达达,经常有艺人在这里表演。中央有一棵大榕树,盘根错节,据
传已有千年的树龄,是这座城市的历史见证。树干底部有一个很大的洞(shudong)。
你可以看到北边有来自各地的行人来来往往,南面人声鼎沸,一派繁华景象,东   
边不时地传来朗朗的读书声,西边则见不到几个行人,一片肃静。
    「盛夏」: 太阳正高挂在东方的天空中。
    你可以看看(look):shudong,baoku
    这里明显的出口是 up、west、south、east、down 和 north。
    侠客行江湖风云录(Board) [ 197 张留言,197 张未读 ]
    新手礼品树(Gift tree)
>
你捧住肚子,嘻嘻哈哈地直笑得两眼翻白,喘不过气来。

killunix 发表于 2010-7-26 15:09:17

用以下正则:
enabled="y"
lines_to_match="5"
match="\s*(\S*)\s*\n\s+|\s+\s*([^\s-]*)-{1,}([^\s-]*)-{1,}(\S*)\s*\n\s+|\s+\n\s*(\S*)\s*"
multi_line="y"
regexp="y"
send_to="12"
sequence="100"
>
Note("%1")
Note("%2")
Note("%3")
Note("%4")
Note("%5")

输出地结果会被打印两编,奇怪啊。

[ 本帖最后由 killunix 于 2010-7-26 03:17 PM 编辑 ]

hba 发表于 2010-7-26 15:56:11

不是打印了两遍,是触发了两次。
一次是“|”被触发一次,这次是不包括“宠物店”地名的;
第二次是“宠物店”又触发了一次。
正则没完善好的问题。

killunix 发表于 2010-7-26 15:59:54

我选择匹配5行,怎么会重复触发呢?

[ 本帖最后由 killunix 于 2010-7-26 04:12 PM 编辑 ]

hba 发表于 2010-7-26 16:09:20

用我这个:
<triggers>
<trigger
   enabled="y"
   group="Multi Line"
   lines_to_match="5"
   keep_evaluating="y"
   match="\s+(\S*)\s+\n\s+|\s+\n\s+(\S*)\-\-\-(\S*)\-\-\-(\S*)\s+\n\s+|\s+\n\s+(\S*)\s+\Z"
   multi_line="y"
   regexp="y"
   send_to="12"
   sequence="100"
>
<send>Note("%1")
Note("%2")
Note("%3")
Note("%4")
Note("%5")</send>
</trigger>
</triggers>



效果:
                         荣昌交易行            
                           |   
               东大街----东大街----东门      
                           |   
                           宠物店            
荣昌交易行
东大街-
东大街-
东门
宠物店




                            药铺               
                           |   
               东大街----东大街----东大街   
                           |   
                           打铁铺            
药铺
东大街-
东大街-
东大街
打铁铺

hba 发表于 2010-7-26 16:13:01

细节方面你再修改一下就好了。
                           礼品店            
                           |   
               贵妃浴场--花园别墅区--南大街   
                           |   
                            驿站               
没认出来。
应该\-\-\-这里再修改一下。

killunix 发表于 2010-7-26 16:17:04

搞定,原来后面要用\Z

[ 本帖最后由 killunix 于 2010-7-26 04:26 PM 编辑 ]

hba 发表于 2010-7-26 16:29:45

原帖由 killunix 于 2010-7-26 16:17 发表 http://pkuxkx.net/forum/images/common/back.gif
东大街后面那个“-”能否去掉?还有有的地图上的"---"是三个,有的是四个,怎么改


这是个有点复杂的问题,为了解决这种中文地名和普通字符相混的问题,我曾花了一个多月的时间去思考。

<triggers>
<trigger
   enabled="y"
   group="Multi Line"
   lines_to_match="5"
   keep_evaluating="y"
   match="\s+([^>;:+-.,]{1,16})\s+\n\s+|\s+\n\s+([^>;:+-.,]{1,16})\-+([^>;:+-.,]{1,16})\-+([^>;:+-.,]{1,16})\s+\n\s+|\s+\n\s+([^>;:+-.,]{1,16})\s+\Z"
   multi_line="y"
   regexp="y"
   send_to="12"
   sequence="100"
>
<send>Note("%1")
Note("%2")
Note("%3")
Note("%4")
Note("%5")</send>
</trigger>
</triggers>

这个应该没太大问题了。

                         荣昌交易行            
                           |   
               东大街----东大街----东门      
                           |   
                           宠物店            
荣昌交易行      
东大街
东大街
东门   
宠物店   

                           礼品店            
                           |   
               贵妃浴场--花园别墅区--南大街   
                           |   
                            驿站               
礼品店         
贵妃浴场
花园别墅区
南大街   
驿站
页: [1] 2
查看完整版本: 正则求解