免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3115 | 回复: 18
打印 上一主题 下一主题

请问这个正则表达式该如何写? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-10 09:58 |只看该作者 |倒序浏览
'Wong-Hi---China Hangzhou ''LYON'' '--Comment for 'WHF'
现在想去除引号中的注释(红色部分),及引号外的注释(蓝色部分)
这里的问题在于:
1、引号中含有引号
2、单行有两部分注释(即"--")
3、后面部分的注释中还有引号,需要去掉
现在只能去除没有引号的情况下的注释去除。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2010-12-10 10:52 |只看该作者
cat lines                                               
'Wong-Hi---China Hangzhou ''LYON'' '--Comment for 'WHF'
sed "s/--.*[^']//g" lines                                                                                      
'Wong-Hi'

论坛徽章:
0
3 [报告]
发表于 2010-12-10 17:20 |只看该作者
你这个只能处理这种情况,如果第二个--后面的单引号没有,替换就错误了

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2010-12-10 17:25 |只看该作者
本帖最后由 zhlong8 于 2010-12-10 17:26 编辑

描述清楚你的字符串的所有可能格式再说啊,要不你又加条件

字符串以 ' 开头?
注释中可以含什么引号?是否配对?
引号内的注释以什么标准结束

论坛徽章:
0
5 [报告]
发表于 2010-12-12 22:29 |只看该作者
不好意思,我没说清楚
是这样的,现在假设“--”是一个行注释标识,我要去除所有以--开头的注释。但是有个特殊情况,就是引号中的字符串需要另外处理,比如上面提到的字符串:
'Wong-Hi---China Hangzhou ''LYON'' '--Comment for 'WHF'
原来是要求,去除对应引号内和引号外的两部分注释,现在只要求,去除引号外的有效的注释部分,在这里即为:
--Commet for 'WHF'
如果直接“--.*”或者“--[^']*”肯定不满足要求的。

论坛徽章:
0
6 [报告]
发表于 2010-12-13 10:51 |只看该作者
s/(\')(.*)(\')--.*/$1$2$3/g

这个行不行?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
7 [报告]
发表于 2010-12-13 15:26 |只看该作者
本帖最后由 zhlong8 于 2010-12-13 16:20 编辑

/^((?:'.*?'|".*?"|[^'"]*?)*)(--.*)?$/ 正文在 $1 中,注释在 $2 中,没考虑引号\', \" 转意,正文最外层引号必须配对

我的理解是你的正文部分可能是3种东西的组和,分别对应着RE中 | 的三项,为了防止匹配最后的注释所以用了非贪婪匹配

  • ''包着的内容
  • “”包着的内容
  • 除此之外的字符空格等内容

论坛徽章:
0
8 [报告]
发表于 2010-12-13 15:54 |只看该作者
简单的一B,

$_=~ s/('.*')--.*/$1/g;

论坛徽章:
0
9 [报告]
发表于 2010-12-14 14:58 |只看该作者
请考虑全面一点,如果是这样呢:
--comment for 'WHF'

论坛徽章:
0
10 [报告]
发表于 2010-12-14 17:17 |只看该作者
  1. 'Wong-Hi---China Hangzhou ''LYON'' '--Comment for 'WHF'
  2. 'Wong-Hi---China Hangzhou '
  3. 'LYON'
  4. ' '
  5. 'WHF'
复制代码
楼主的数据给的本身就有问题。

这样配对的话,你红色的地方根本就判断不出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP