替换非单词字符,结尾处除外

时间:2016-01-06 17:48:41

标签: regex

我确定以前曾问过这样的问题,但我无法找出搜索参数来找到答案。我试图替换非单词字符(或连续的多个非单词),而不是替换字符串末尾的单词。例如,以下内容:

Corynebacterium sp JB4.Arthrobacter arilaitensis re117, CIP 108037Microbacterium sp. JB110

应该成为:

Corynebacterium_sp_JB4Arthrobacter_arilaitensis_re117_CIP_108037Microbacterium_sp_JB110

在试图找出一种不在第一项中选择最后一段时间的方法之后,我意识到我实际上还需要2次操作,一次用空字符串替换尾随的非字字符,另一种用来替换使用"_"的其他字符,因此以下内容适用于python:

re.sub(r'\W+', "_", re.sub(r'\W$', "", string))

但是我想知道,如果我想让第一个项目以Corynebacterium_sp_JB4.结尾,是否有办法做到这一点?我在http://www.regexr.com/上玩了几个不同的东西,但我找不到解决方案。认为它可能与预测有关,但是(?!$)似乎没有用(或者我做错了,我还没有使用过预测选项之前)。

2 个答案:

答案 0 :(得分:1)

针对您案例的建议正则表达式:

/(\s|\W)(?=.*.)/g

部分说明:

  1. (\ s | \ W) - 搜索任何空格(\s)或“不是字”元素(\W
  2. (?=。*。) - 接下来是
  3. Regexr结果

    Regexr example of this case

答案 1 :(得分:0)

  如果我希望第一个项目结束,那么有没有办法做到这一点   Corynebacterium_sp_JB4.

更简单的方法是

re.sub(r'\W+\b', '_', 'Corynebacterium sp JB4.')

- \b只会导致后跟单词的非单词字符匹配。