当前位置: 首页 > 面试题库 >

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

姬正文
2023-03-14
问题内容

我有一个像这样的字符串/列

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

目前,它的工作正常。
如果扩展名大于或小于3,或者字符串没有被截断,则应该删除最后4个字符,并有可能无法得到正确的结果。
我正在寻找一种更美观的方法。
任何机会?


问题答案:

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

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

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

“ W后面的’_’丢失了。还有机会得到吗?”

您可以随时格式化替换字符串。最简单的方法是做我所做的事情,并对两个匹配模式之间的下划线进行硬编码。另外,您也可以使其本身成为搜索模式,并将其包含在替换字符串中(尽管您更喜欢这样做,以便进行更复杂的搜索)。

Oracle在10g中引入了正则表达式。这些功能在文档中介绍。regex实现是POSIX兼容的,因此它缺少您在Perl中可能遇到的某些功能。Regex支持在SQL参考的附录中有详细说明。

至于教程,我得到了奥莱利(O’Reilly)口袋书的精装本。我在《 Open World 2003》上获得了副本,但该电子书的定价合理。
在这里买。Anotgher的良好起点是cdOTN论坛上的一系列主题:从此处开始阅读。



 类似资料:
  • 问题内容: 我有一个清单 我正在尝试删除其超字符串已经在列表中的字符串。在这种情况下,结果应为: 我已经写了代码: 但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本,而这是我的原始列表。 问题答案: l=[‘abc’,’abcdef’,’def’,’defdef’,’polopolo’] print [j for i, j in enumerate(l) if all(j

  • 问题内容: 我想从python中的字符串列表中删除所有空字符串。 我的想法如下: 有没有更多的Python方式可以做到这一点? 问题答案: 我会用: Python 3从返回一个迭代器,因此应包装在对的调用中

  • 问题内容: 我使用的框架会不时返回格式错误的字符串,其中包含“空”字符。 例如,“ foobar”表示为:[,f,o,o,b,a,r] 第一个字符不是空格(’‘),因此System.out.printlin()将返回“ foobar”而不是“ foobar”。但是,String的长度是7,而不是6。显然,这使大多数String方法(等于,拆分,子字符串等)变得无用。有没有办法从字符串中删除空字符?

  • 问题内容: 我有一个停用词列表。我有一个搜索字符串。我想从字符串中删除单词。 举个例子: 现在,代码应删除“ What”和“ is”。但是在我的情况下,它会去除“ a”和“ at”。我在下面给出了我的代码。我可能做错了什么? 如果输入查询为“什么是Hello”,则输出为: 为什么会这样? 问题答案: 这是一种方法: 我注意到,如果列表中包含小写字母,您还希望删除该单词,因此我在条件检查中添加了对的

  • 问题内容: 如何在Java中从给定的字符串中删除所有方括号(“ []”)? 在这种情况下将使用什么正则表达式? 问题答案: 使用这个:

  • 我有一个文本文件,其中包含以下内容:鲍勃去“商店”商店“买牛奶”买牛奶。 我想删除string1中所有引用的内容,使其只包含:Bob去商店买牛奶。 有没有一种不用正则表达式就能做到这一点的方法?我目前正在尝试使用split()方法。我首先使用split()将文本文件读入名为string1的字符串变量,然后将值存储回名为newString的新字符串中。 我对java非常陌生,不确定是否正确使用了sp