如何正则表达式匹配()在单词的末尾

Posted

技术标签:

【中文标题】如何正则表达式匹配()在单词的末尾【英文标题】:How to RegEx match ()'s at the end of a word 【发布时间】:2021-09-01 20:51:03 【问题描述】:

我需要一个正则表达式 @"" 来匹配单词末尾的两个括号 ()

试过\w*()\b,但没用。

所以我需要匹配这样的内容:"Hello, world test(test) testing"

我只需要它来匹配那里的test(word)

【问题讨论】:

/[(].*[)]/g 使用这个。并查看regexr.com 【参考方案1】:

如果最后一个括号后有空格,则使用单词边界将无法匹配,因为) 和空格之间没有单词边界。

请注意,使用\w* 会选择性地重复单词字符,也可能只匹配()

你可能会使用:

\w+\((?:\w+(?:\s*,\s*\w+)*)?\)
\w+ 匹配 1+ 个单词字符 \(匹配( (?:非捕获组 \w+ 匹配 1+ 个单词字符 (?:\s*,\s*\w+)* 可选择重复匹配 , 和 1+ 个单词字符 )? 关闭组并使其成为可选 \)匹配)

Regex demo

【讨论】:

@"\w+(\w*)(?!\S)" 根本不起作用,但 @"\w+(\w*)" 起作用,但我也希望空格起作用例如“你好(a)你好(a)”。而且我还需要它来检测更多参数,例如“test(a, b)”,因为这是用于 lua 的语法高亮显示。 gyazo.com/43521715663bfb24a3e668dd18b81e54 @IvanoVladimirSetiawan 喜欢这个? regex101.com/r/z2iGmj/1 是的,但由于某种原因,我的语法高亮器不起作用 现在 test(a, b) 可以工作了,但由于某种原因,空格仍然不起作用,我认为这是我写的颜色代码,但我不确定。 gyazo.com/dbac4542539f12eb731d631a79d1247b【参考方案2】:

() 是用于分组的特殊字符。所以你必须对它们进行转义以匹配文字括号。您还需要在括号内添加一些内容以匹配那里的单词

\w*\(\w*\)\b

【讨论】:

如果我喜欢“testing(test)aaaa but not testing(test)aaaa”,它可以工作,因为某种原因,空格不允许正则表达式工作。我也希望它也能像“测试(a,b)”一样检测。这是 lua 的语法高亮。 @IvanoVladimirSetiawan 使用正则表达式进行语法高亮是一个坏主意。你需要一个真正的标记器来完成这项工作,否则它会在很多情况下失败 我有一个单独的 dll 上的正则表达式,所以它即使在十和千行上也不会滞后 它与滞后无关。谁说的?这是解析的正确性。使用正则表达式,在许多情况下可能会出现问题,例如 cmets 内的代码或许多其他极端情况【参考方案3】:

/[^\s]+[(].*[)]/g 使用这个。并查看regexr.com

我添加这个表达式,你给字符串。我的表达式突出显示了你需要的字符串。

【讨论】:

以上是关于如何正则表达式匹配()在单词的末尾的主要内容,如果未能解决你的问题,请参考以下文章

Java如何在正则表达式中匹配重复单词?

如果正则表达式不包含特定单词,如何匹配它?

正则表达式:\B 匹配不是单词开头或结束的位置

如何匹配文件中的某些单词并列出该匹配单词的所有行? (没有正则表达式)

正则表达式:如何匹配以括号“)”结尾的单词

如何使用正则表达式匹配nuxtjs,vue中路由中的特定单词?