我是groovy的新手并且一直在尝试这个
我的目标字符串可以从其中或那里开始,然后可以跟任意数量的。(点字符)和单词。我需要用_(下划线)
替换所有。(点字符)任何不以 或 开头的
示例字符串是
hey where.is.the book on.brown.table
hey there.is.a.boy.in.the city Delhi
hey here.is.the.boy living next door
预期输出
hey where_is_the book on.brown.table
hey there_is_a_boy_in_the city Delhi
hey here.is.the.boy living next door
我能够匹配确切的模式。使用/(where|there)\.((\w+)(\.))+/
,但当我使用replaceAll
时,我的结果不正确。
答案 0 :(得分:2)
您可以使用
/(\G(?!\A)\w+|\b(?:where|there)\b)\./
或者如果你只需要处理这两个字:
/(\G(?!\A)\w+|\b[wt]here\b)\./
替换为$1_
。请参阅regex demo。
<强>详情
(\G(?!\A)\w+|\b(?:where|there)\b)
- 第1组捕获:
\G(?!\A)\w+|
- 上一场比赛结束(\G(?!\A)
),然后是1 +字词(\w+
)或\b(?:where|there)\b
- 一个where
或there
全字(如果您只需要处理这两个字,您甚至可以将其写为\b[tw]here\b
)\.
- 一个点。请参阅Groovy demo:
String s = "hey where.is.the book on.brown.table\nhey there.is.a.boy.in.the city Delhi\nhey here.is.the.boy living next door"
print s.replaceAll(/(\G(?!\A)\w+|\b(?:where|there)\b)\./, '$1_')
输出:
hey where_is_the book on.brown.table
hey there_is_a_boy_in_the city Delhi
hey here.is.the.boy living next door