【问题标题】:Series.str.replace() from Vectorized String Methods来自向量化字符串方法的 Series.str.replace()
【发布时间】:2014-07-23 22:53:42
【问题描述】:

在向量化字符串方法文档中 (http://pandas.pydata.org/pandas-docs/stable/basics.html#vectorized-string-methods)...

In [204]: s3 = Series(['A', 'B', 'C', 'Aaba', 'Baca',
   .....:             '', np.nan, 'CABA', 'dog', 'cat'])
   .....: 

In [205]: s3
Out[205]: 
0       A
1       B
2       C
3    Aaba
4    Baca
5        
6     NaN
7    CABA
8     dog
9     cat
dtype: object

In [206]: s3.str.replace('^.a|dog', 'XX-XX ', case=False)
Out[206]: 
0           A
1           B
2           C
3    XX-XX ba
4    XX-XX ca
5            
6         NaN
7    XX-XX BA
8      XX-XX 
9     XX-XX t
dtype: object

为什么在上面的 .replace() 示例中,正则表达式没有选择“ba”和“BA”作为 replace() 方法中的第一个参数并被“XX-XX”替换?在我看来,它是在说 ^ 后跟 . 的任何字符。一个 a 或 dog 替换,以任何字符开头,用 'XX-XX',无论大小写。

【问题讨论】:

    标签: python regex pandas str-replace


    【解决方案1】:

    这是因为在字符串的开头没有找到 'ba' 和 'BA',其中替代在 ^.a 中具有 ^ 锚点,它断言字符串开头的位置。

    指定者:
    Reference - What does this regex mean?

    【讨论】:

    • 所以正则表达式只是找到该条件的第一个实例,替换它并继续? (我在问题的最后做了一个小编辑,以澄清我认为它在“说”什么,但没有考虑搜索是否每行重复一次以上。)那么我将如何找到该条件的所有实例并替换他们都带XX-XX?正则表达式有什么变化? @unihedron
    • @Canuckish 正则表达式将匹配 ^.a(除换行符后跟字符串开头的“a”外的任何内容)|(或)dog(字面意义上的字符序列“狗”) )
    • @Canuckish 不客气。您可以删除锚点,即改用'.a|dog'
    猜你喜欢
    • 1970-01-01
    • 2013-01-20
    • 2018-07-27
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多