我对正则表达式不是很好,并且每次出现时都会让我感到困惑,所以我不想写一个可能不正确的正则表达式字符串,而是想以不同的方式分割字符串。
我们说我有一个字符串"你好,我的名字是约瑟夫!哈哈,你好!"每当遇到非字母数字字符时,我想分开它。那么,在这种情况下,我会得到:
"你好" "我" "名称" "是" "约瑟夫" "哈哈" "你好"
有没有办法在没有正则表达式字符串的情况下执行此操作?如:在任何角色分裂!=字母数字?
(是的,我确实意识到不能纠正我的正则表达式缺陷可能不是一件明智的事情!)
答案 0 :(得分:1)
就我个人而言,我认为使用简单直接的正则表达式完成这些简单的任务是合适的。
比较 itertools 和 re 解决方案:
$(document).ready(function() {
$("button").click(function(){
var checkBoxValues = [];
$.each($("input[name='check_name']:checked"), function(){
checkBoxValues.push($(this).val());
});
console.log(checkBoxValues);
});
});
至于我,我在这里投票支持正则表达式。 import itertools, re
s = "hello, my name is Joseph! Haha, hello!"
print(["".join(x) for _, x in itertools.groupby(s, key=str.isalnum)][0::2])
print(re.findall(r"\w+", s))
匹配一个或多个单词字符(字母,数字,下划线),\w+
返回所有非重叠的单词。
itertools re.findall
根据设置为字母数字(groupby
)的key
和所有偶数标记(此具体情况下的非单词块)对子字符串块进行分组已使用str.alnum
从最终结果中删除。如果一个字符串以非单词字符开头,这不会起作用,正则表达式解决方案更安全,更容易。
答案 1 :(得分:0)
当有人试图avoid using regex时,我总是很高兴 ;)但在这里,它可能是这项工作的最佳工具。
您可以编写自己的解析器,但这更详细:
s = "hello, my name is Joseph! Haha, hello!"
words = []
lasti = 0
lastp = False
for i,p in enumerate (not c.isalpha() for c in s):
if p != lastp:
if p: words.append (s[lasti:i])
lasti, lastp = i,p
print (', '.join (words))