【问题标题】:RegEx (.net) to remove first character and everything after the last underscore正则表达式(.net)删除第一个字符和最后一个下划线之后的所有内容
【发布时间】:2018-01-18 13:36:06
【问题描述】:

如果字符串中有 - 或 ~ 或 = 或任何特殊字符,我有这个正则表达式会中断。基本上,我想删除第一个字母(即 a)并删除最后一个下划线之后的所有内容。 (RegEx必须是一行)例如Tester链接http://regexstorm.net/tester?p=%28%3f%3c%3da%29%5b%5cw+%5d%2b%28%3f%3d_%29&i=aPersonal+Protective+Equipment_REV2.docx%0d%0aaFreight+Forwarder+Standard+Operating+Procedure+-++Armenia_REV1.docx&o=i

(?<=a)[\w ]+(?=_)

aPersonal Protective Equipment_REV2.docx - 适用于此字符串(结果是个人防护设备)

但是以下字符串失败 aFreight Forwarder Standard Operation Procedure - Armenia_REV1.docx(结果是 rmenia)

【问题讨论】:

  • 好收获。我更新了细节。

标签: .net regex


【解决方案1】:

将模式更改为此似乎可以解决破折号的问题:

(?<=a)[\w\-=~ ]+(?=_)

我的测试用例:

a个人防护装备_REV2.docx
aFreight Forwarder 标准操作程序 - Armenia_REV1.docx
aFreight Forwarder~~ 标准操作= 程序 - Armenia_REV1.docx

\w 匹配单词。破折号是一个单词边界。要保留它,您还必须匹配它。

你可以考虑

(?<=^a).+?(?=_.+?$)

相反。如果您要一次匹配多个项目,则需要启用多行模式。
这将匹配第一个字符和最后一个下划线之间的任何字符。

【讨论】:

  • 感谢山姆的修复。但是,如果我在字符串中放入其他特殊字符(例如 = 或 ~ 等),它会中断。你怎么看?
  • 它似乎对我有用。由于我看不到您尝试过的内容,因此我无法提供太多帮助。我已经更新了答案以包括 =~
  • 山姆。你是对的,如果有 - 或 + 或 ~,代码就可以工作。但是,我是否需要将所有特殊字符放入代码中,因为如果我将 ( 放入字符串中,它将中断。是否可以重新执行代码?删除第一个字符并删除最后一个下划线之后的所有内容。
  • 试试我刚刚做的编辑。另外,如果您使用的是 Windows,我强烈推荐 Expresso
  • regexstorm.net/… 对你有用吗?
【解决方案2】:
(^.*?(?=a)a)|_[^_]*$

上面的 RegEx 有效(替换和忽略大小写)

asomefile_(rw_340-v4) follow up by_ver2.xlsx

结果:somefile_(rw_340-v4) follow up by

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多