在最后一次出现括号

时间:2017-07-05 06:18:52

标签: javascript regex sublimetext3

我正在尝试将词典文本文件(使用Sublime文本编辑器)骰子化,并且需要在最后)之后首次出现空格,因为我需要用可以导入的分隔符替换它进入Google表格。

例如,以下内容:

abierto (masculine) open

abjaso (masculine); abjasio (masculine) Abkhaz

abogado (masculine); abogada (feminine); notario (masculine)    lawyer

应该是(注意_分隔符):

abierto (masculine)_    open

abjaso (masculine); abjasio (masculine)_    Abkhaz

abogado (masculine); abogada (feminine); notario (masculine)_   lawyer

我该如何做到这一点?

编辑:我已尝试/\)[^\)]+$/g - 在字符串的末尾获得一个)后跟一个或多个非)字符,贪婪..但它只能找到一个结果。

2 个答案:

答案 0 :(得分:1)

您可以使用

\)(?!.*\))

查找)的最后一次出现,然后将其替换为)_,这会为您提供所需的结果。这是ST3的结果

enter image description here

说明:

\)   # find ")"
(    # OPEN capturing group 1
  ?!    # negative lookahead, aka "do not match"
  .*    # anything until
  \)    # character ")"
)    # CLOSE capturing group 1

因此,如果你有例如正则表达式a(?!b)并在“ab”,“ac”和“ad”上测试它,如果它在“不匹配的东西之前,它将仅匹配”a“ “b。所以“ac”和“ad”中的“a”在这里匹配。但不是“ab”。在)

之前,所有内容都会选择)

来自评论:

  

你能帮忙解释一下吗?另外,你能解释为什么这在Regex101中不起作用吗? regex101.com/r/GFwrn5/1

那是因为你没有在那里启用全局/g标志。如果你启用它,它将完成这项工作。

答案 1 :(得分:0)

您可以使用贪婪匹配<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 来使用此正则表达式匹配最后.*\)

)

然后将其替换为:

/(.*\)) /

$1_\t 用于标签的位置(您可以选择4个空格而不是\t

RegEx Demo