这样的数据使用正则表达式怎么匹配?

SAT___ 发布于 10/13 16:32
阅读 478
收藏 0

【华为云1024程序员节·向云而生】预约直播 抽14件华为电子产品礼包!>>>

样本数据 过滤规则 结果
(Y)FMSBSLEP (Y)FMSBSLEP FMSBSLEP
LSATPZSY LSETPZSY LSATPZSY LSETPZSY LSATPZSY LSETPZSY
(Y)LSQLBGLP (Y)LSQLPGLP (Y)LSQLBGLP (Y)LSQLPGLP LSQLBGLP LSQLPGLP
LHJZSY(G) LHJZSY(G) LHJZSY
WXKL(MT) WXKL(WT) WXKL(MT) WXKL(WT) WXKL WXKL
5%PTTZSY 5%PTTZSY PTTZSY
JYECGRSα-2aZSY JYECGRSα-2aZSY JYECGRSZSY
GJYDSZSY(YTC) GJYDSZSY(YTC) GJYDSZSY
QYJDF130/0.4LHNZSY QYJDF130/0.4LHNZSY QYJDFLHNZSY
CNYYRJ(TPF-T) CNYYRJ(TPF-T) CNYYRJ
a-LXSZSY a-LXSZSY LXSZSY

第一列是原始需要处理的数据

第二列标红的是需要过滤掉的字符, 最终只保留连续的大写字母内容,可以包含空格

需要一个正则可以匹配?

加载中
0
saileidigi
saileidigi
/\(.+?\)|(.+?)|[^A-Z^\s]+/

 

SAT___
SAT___
谢谢!
0
jiqingluoye
jiqingluoye
"QYJDF130/0.4LHNZSY".replaceAll("([\\(|(][\\s\\S]*?[\\)|)])|([^A-Z]?)", "")
SAT___
SAT___
谢谢! :)
0
爱翻岩的鱼

还有全角字符
刚学正则拿来练练手:)
sed -E 's/([((])[^()()]*[))]|[^[:upper:] ]+//g'

 

SAT___
SAT___
谢谢! 最佳答案只可以一个, 抱歉!
0
前端大师傅
前端大师傅

一楼很明显写错了!

(?<!\(|()[A-Z ]{2,}(?!\)|)|-) 的确可以 过虑  (Y)FMSBSLEP  但也可以过虑 (A)FMSBSLEP  (B)FMSBSLEP的所有值,即小括号中的字母可以为A-Z的任意字母。明显不符合意思。

打比方:手机号:xxxx,是把手机号:后的数字xxx取出来。如果只是把手机号:这四个字符过虑取出后面的这样就有可能出错。

这题需要用到零宽断言。

如果没理解错的话,楼主的意思应该是把(Y)后面的固定字符串取出来,即以(Y)开首的FMSBSLEP取出后面的。

正则应该这样写:

(?<=\(Y\))FMSBSLEP

当然如果要取出任意大写字符的话则是:

(?<=\(Y\))[A-Z]+

前端大师傅
前端大师傅
回复 @SAT___ : 主要还是楼主你的需求是找出(*)开始的字符不包含(*),还只是去掉小括号中的内容?如果是前者则把代码改成(?<=\([.]\))即改成.(小数点)即可。如果是后者那就更简单\([.]\) 去掉这个就可以了。
SAT___
SAT___
小括号中的字母可以为A-Z的任意字母,只要是在括号内的都不要,包括括号
0
YANG_YAWEI
YANG_YAWEI

(?:[\((][^\(\)()]+[\))])|(?:[^A-Z\s]+)

SAT___
SAT___
:thumbsup:谢谢!
返回顶部
顶部