连续标点符号和字母数字字符

时间:2017-11-16 17:17:38

标签: python regex

可能是一个简单的问题,但我没有很多正则表达式的经验。我想取一个字符串并选择所有连续的标点字符和所有连续的字母数字字符

这是我能得到的最接近的

r="my9zza :)asax"
import re
re.findall(r'(\w+)|([^a-zA-Z0-9\s]+)', r)

返回

[('my9zza', ''), ('', ':)'), ('asax', '')]

但我想

['my9zza', ':)', 'asax']

2 个答案:

答案 0 :(得分:0)

只需使用:

//image with color and size
    func imageWithColor(color: UIColor, size: CGSize) -> UIImage {
        let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()

        context!.setFillColor(color.cgColor)
        context!.fill(rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image!
    }

问题是原始代码中有两组括号,导致r = "my9zza :)asax" import re print(re.findall(r'\w+|[^a-zA-Z0-9\s]+', r)) 返回2-ple。

如果您想保留原始正则表达式,您还可以使用以下方法轻松将结果转换为所需的输出:

findall

答案 1 :(得分:0)

你可以试试这个:

// assume some input stream of values:
var inputs = Obs.of(1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8);
// emit each value from stream at a given interval:
var events = Obs.zip(inputs, Obs.interval(1000))
    .map(val => val[0])
    .forEach(console.log);

输出:

s = [('my9zza', ''), ('', ':)'), ('asax', '')]
final_s = [[b for b in i if b][0] for i in s]