我有一个很大的数字数据框,但是每个数字都采用不同的格式。我想使用正则表达式以111-111-1111格式替换大量的
numbers["numbers"].replace('^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$, "/*/*/*-/*/*/*-/*/*/*/*", regex=True')
应该使用表达式找到的数字,并保留基数,但更改其格式。 1234567890应该等于123-456-7890
答案 0 :(得分:0)
您可以使用
df["numbers"] = df["numbers"].str.replace('^(?:\+\d{1,2}\s)?\(?(\d{3})\)?[\s.-]?(\d{3})[\s.-]?(\d{4})$', r'\1-\2-\3')
详细信息
^
-字符串的开头(?:\+\d{1,2}\s)?
-的可选序列\(?
-可选的(
(\d{3})
-第1组:三位数\)?
-可选的)
[\s.-]?
-可选的空格.
或-
(\d{3})
-第2组:三位数[\s.-]?
-可选的空格.
或-
(\d{4})
-第3组:四位数$
-字符串的结尾。替换模式(\x
中的r'\1-\2-\3'
是用相应组捕获的值的占位符。