免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Perl 求正则
12下一页
最近访问板块 发新帖
查看: 2962 | 回复: 11
打印 上一主题 下一主题

求正则 [复制链接]

论坛徽章:
1
丑牛
日期:2014-02-14 17:07:04
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-28 15:41 |只看该作者 |倒序浏览
我想给括号中间的@#前面都加上空格
能用一条正则来替换么?
谢谢

12@3(13@3@4#5#67)12#3

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
2 [报告]
发表于 2012-06-28 17:10 |只看该作者
本帖最后由 cdtits 于 2012-06-28 17:11 编辑
  1. my $text = '12@3(13@3@4#5#67)12#3';
  2. while ($text =~ s/(.*\(.*?)(?<! )([\@\#])(?=.*\))/$1 $2/g) {};
  3. print $text;
复制代码

论坛徽章:
1
丑牛
日期:2014-02-14 17:07:04
3 [报告]
发表于 2012-06-28 17:20 |只看该作者
本帖最后由 ace_fei 于 2012-06-28 17:29 编辑

回复 2# cdtits
谢谢您的回复,你的答案很好。
其实我是在文本替换工具里写正则表达式,所以也不能用到while。


   

论坛徽章:
0
4 [报告]
发表于 2012-06-28 17:44 |只看该作者
my $str = '12@3(13@3@4#5#67)12#3';
$str =~ s/([\@#])(?=[^\)]*?\))/ $1/g;
die $str;

取巧的办法

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
5 [报告]
发表于 2012-06-28 22:35 |只看该作者
本帖最后由 ziyunfei 于 2012-06-28 22:36 编辑

regexbuddy 选.net正则
  1. (?<=\(.*)(@|#)(?=.*\))
复制代码
替换为
  1. 空格$&
复制代码


一般编辑器都不是用.net写的

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2012-06-28 23:25 |只看该作者
回复 1# ace_fei
  1. perl -le '$str="12\@3(13\@3\@4#5#67)12#3"; $str=~s/(?=((@|#)(?!([^()]+([(]|$)))))/ /g;print $str'
  2. 12@3(13 @3 @4 #5 #67)12#3
复制代码

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
7 [报告]
发表于 2012-06-28 23:43 |只看该作者
本帖最后由 cdtits 于 2012-06-29 09:45 编辑

楼上的很妙:
  1. my $text = '12@3(13@3@4#5#67)12#3';
  2. $text =~ s/(?=[@#])(?!([^()]+\())/ /g;
  3. print $text, "\n";
复制代码
还有一种类似方法:
  1. $text =~ s/(?=[@#])(?=([^()]+\)))/ /g;
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-06-29 06:44 |只看该作者
  1. my $str = '12@3(13@3@4#5#67)12#3';
  2. $str =~ s/([\@#])(?=[^\(\)]*?\))/ $1/g;
  3. die $str;
复制代码
写漏了

论坛徽章:
0
9 [报告]
发表于 2012-06-29 09:43 |只看该作者
#!D:\strawberry\perl\bin\perl5.12.3 -w

use strict;
use warnings;

my $a='12@3(13@3@4#5#67)12#3';
if($a=~/\(.+\)/)
{
        my $_=$&;
        s/\@/ \@/gx;
        s/\#/ \#/gx;
        print $_,"\n";
}

论坛徽章:
0
10 [报告]
发表于 2012-06-29 10:01 |只看该作者
my $a='12@3(13@3@4#5#67)12#3';
if($a=~/\(.+\)/)
{
        my $_=$&;
        s/\@/ \@/gx;
        s/\#/ \#/gx;
        $a=~s/\(.+\)/$_/;
        print $a,"\n";
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP