【发布时间】:2016-02-23 13:13:42
【问题描述】:
假设您给出的输入可能类似于 (identifier1 identifier_2 23 4)。
我想在每个标识符后添加一个# 符号,它可以包含字母、数字和下划线。它们只能以字母开头,后跟字母、数字和下划线的变体。我的方法是这样的:
input.replaceAll("[A-Za-z0-9_]+", "$0#");
但是,这也会在我想排除的每个数字后面加上 # 符号。结果应该是(identifier1# identifier_2# 23 4)。有没有可能用正则表达式解决这个问题?
【问题讨论】:
-
不是work as expected吗?你的意思是,
#不应该出现在23和4之后? -
我只想将
#符号放在标识符之后而不是数字之后。所以应该是 (identifier1# identifier_2# 23 4) -
我认为
\b(?!\d+\b)[A-Za-z0-9_]+\b可以提供帮助。但它不会排除像_____这样的字符串。要排除硫糖,您可以使用\b(?!_+\b|\d+\b)[A-Za-z0-9_]+\b进一步限制。甚至\b(?!\d+\b)[A-Za-z0-9]+(?:_[A-Za-z0-9])*\b. -
我假设括号不是您输入的一部分 - 如果是,则需要额外的规则。