【问题标题】:Regex specific word after equals sign等号后的正则表达式特定单词
【发布时间】:2017-06-21 20:43:26
【问题描述】:

问题是在整个文件中查找和替换单词。我正在尝试重命名几个字段,但不编辑这些字段的系统名称。最后,需要找到/替换问题,问题,问题,问题。我正在使用 Netbeans(查找并替换正则表达式)打开包含此代码的 .properties 文件,但可以使用其他内容。

等号右侧的文本需要替换。有时右边的单词旁边有句号,大多数时候没有。尝试使用正则表达式,因为文件中有大约 10000 行(这是系统字段的显示文本,而不更改字段引用本身)。

要搜索的文本示例:

issue.columns.admin.title=Issue Navigator Default Columns

browseproject.issues.by.status.more=View these issues in the Issue Navigator 
sorted by Status

issue.operations.voting.resolved=You cannot vote or change your vote on 
resolved issues.

在 netbeans 中使用以下作为模式,其正确率约为 90%。

(?<!([=.[a-z]]))issue(?!([[a-z]]))

但是,它也匹配“问题”。在诸如“issue.operations.voting.resolved”之类的字段中,这意味着查找和替换会通过更改对系统字段的引用而导致问题。有没有办法添加到我已经完成的内容中,使其匹配出现在等号之后但不在等号之前的句点的单词?

【问题讨论】:

  • 那条评论有帮助吗?
  • 是的,非常有帮助。我不确定,但看起来这解决了我的问题 :) 感谢您链接到实时版本,我可以在其中看到它的实际效果。

标签: regex netbeans


【解决方案1】:

你可以使用

(?i)(\G(?!^)|^[^=\n\r]*=)(.*?)\bissues?\b

替换为$1$2&lt;SOME_REPLACEMENT&gt;

请参阅regex demo

匹配:

  • (?i) - 一个不区分大小写的内联修饰符,使模式不区分大小写
  • (\G(?!^)|^[^=\n\r]*=) - 第 1 组(用替换模式中的 $1 引用):上一个匹配后的位置 (\G(?!^)) 或后跟 0+ 字符而不是 = 和换行符,然后是 =
  • (.*?) - 第 2 组(用替换模式中的 $2 引用):任何 0+ 个字符,尽可能少,直到第一次出现...
  • \bissues?\b - 一个完整的词 issueissues

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2017-02-03
    • 2021-04-20
    • 1970-01-01
    • 2022-08-18
    • 2022-10-18
    • 1970-01-01
    相关资源
    最近更新 更多