我有以下字符串
$ 7 $ 7 + 41 + 11 + 11 + 4 2 + 21 + 41 + 71 + 13!
数字对应字典字符串索引,美元符号表示字母为大写,加号表示两位数。剩下的角色将留下来。
我把这种模式放在一起:
[$][\d]|[\d][x(?=+)][x(?!\d)]|[\d]|[\D]
但是,它找不到$7+4
,并会将其拆分为$7
,+
,4
。
欢迎任何提示或建议。
修改
鉴于以下内容:
$741+11+11+4 2+21+41+71+13!
abcdefghijklmnopqrstuvwxyz
我期望的结果是Hello world!
。每组字符对应于字典中的索引。因此$7
表示字典7
位置中字符的大写字母(H
)。 4
指向字典中的4
元素(e
),1+1
指向字典中的11
元素(l
})。
答案 0 :(得分:0)
我想你想做这个
"$7$7+41+11+11+4 2+21+41+71+13"
拆分为
$7, $7, +41, +11, +11, +4, 2, +21, etc...
所以我认为正则表达式可能是
([\$\+\s][0-9]?+)
以Java形式表示:
"([\\$\\+\\s][0-9]?+)"
您可以在此网站中对此进行测试
答案 1 :(得分:0)
让我们看一下您实施的问题:
index_dict = {v: np.flatnonzero(arr == v) for v in np.unique(arr)}
[$][\d]|[\d][x(?=+)][x(?!\d)]|[\d]|[\D]
括号表示&#34;找到匹配[<stuff>]
&#34;的单字符 - 对你的案子来说,它几乎没必要<stuff>
不会发现任何内容:$表示&#34;行尾&#34;,它想匹配&#34;行尾和数字&#34; [$][\d]
我很难预测这会匹配什么 - 从一个数字开始,然后有一个&#34;字符x后跟&#39;没有至少一次&#39 ;&#34; (+表示至少一次),然后&#34;字符x后面没有数字&#34; [\d][x(?=+)][x(?!\d)]
- 数字[\d]
- 非数字字符你&#34; |&#34; (或)这些在一起。
结论:
[\D]
,\$
要重新解释您的问题陈述,您需要查找这些群组:
\+
而非$
下面的课程就是这样:
+
输出:
public class Regex {
public static void main(String[] args) {
String test = "$7$7+41+11+11+4 2+21+41+71+13!";
Pattern pattern = Pattern.compile( "(\\$\\d)|(\\+\\d\\d)|([^\\$\\+])");
Matcher matcher = pattern.matcher(test);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}