加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 从字符串中删除随机表达式

发布时间:2020-12-15 04:59:39 所属栏目:Java 来源:网络整理
导读:我有一个像这样的字符串/列 String a = "000003023_AggregateStopLossLimit_W x3A 973911_2012-12-22.PDF"; 我想创建一个子字符串,其中没有“x3A 973911”部分. 这意味着我想要这样的东西, 000003023_AggregateStopLossLimit_W_2012-12-22.PDF 有一个这样的
我有一个像这样的字符串/列

String a = "000003023_AggregateStopLossLimit_W x3A 973911_2012-12-22.PDF";

我想创建一个子字符串,其中没有“x3A 973911”部分.

这意味着我想要这样的东西,

000003023_AggregateStopLossLimit_W_2012-12-22.PDF

有一个这样的字符串列表,它们具有不同的值但格式相同.我希望删除字符串的一部分,它在第一个空格之后,在下一个’_’结束.

这就是我已经做过的,这工作正常,但想知道是否有更好的方法.

String b = a.replaceAll(a.substring(a.indexOf(" "),a.indexOf("_",a.indexOf(" "))),"");

如果我可以在db本身(oracle,而不是java)中执行此操作会更好.有没有想过直接使用select从列中获取这个格式化的字符串?

还有一个要求,我不想显示文件的扩展名.所以没有”’之后没有.应该显示,这意味着这样的’000003023_AggregateStopLossLimit_W_2012-12-22′
我使用之前的APC解决方案尝试了以下方法

select regexp_replace ( your_string,'([^[:space]]*) (.*)_(.*)....','1_3') as new_string from your_table

这个工作正常.这应该是删除最后4个字符,如果扩展名大于或小于3或者字符串没有被截断,则存在无法获得正确结果的风险.我正在寻找一种更美观的方式来做到这一点.
任何机会?

解决方法

要在数据库中执行此操作:

select regexp_replace ( your_string,'([^[:space]]*) (.*)_(.*)','1_3') as new_string
from your_table

不幸的是,Oracle在其正则表达式实现中没有任何强制执行惰性(非贪婪)的语法.这就是为什么我的原始'(.*)’包括x3A:它与最后一个空格匹配,下面是下划线.但是,否定语法会将字符串隔离到第一个空格.

“The ‘_’ after W is missing. Any chance to get that also?”

您可以根据需要格式化替换字符串.简单的方法是做我已经完成的工作,并在两个匹配的模式之间硬编码下划线.或者,您可以将其设置为自己的搜索模式,并将其包含在替换字符串中(尽管您更有可能为更复杂的搜索执行此操作).

Oracle在10g中引入了正则表达式;函数涵盖in the documentation.正则表达式实现符合POSIX,所以它缺少Perl中可能遇到的一些函数.正则表达式支持详见an appendix to the SQL ref.

至于教程,我有一本很复杂的O’Reilly口袋书;我在Open World 2003获得了我的副本,但电子书的价格合理. Buy it here. Anotgher的好起点是OTN论坛上的一系列线程:start reading here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读