Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过向正则表达式添加某物来修改另一个正则表达式_Python_Regex_Pandas - Fatal编程技术网

Python 通过向正则表达式添加某物来修改另一个正则表达式

Python 通过向正则表达式添加某物来修改另一个正则表达式,python,regex,pandas,Python,Regex,Pandas,我正在尝试使用replace修改我的正则表达式。我最终想要做的是在我现有的模式前面添加01/,它几乎是在用另一个模式替换一个模式。 以下是我对“替换”所做的操作: df['found_d'].str.replace(pattern2, '1/'+pattern2) #must be str, not _sre.SRE_Pattern 我想使用sub它需要3个参数,现在我不太确定如何使用它。 以下是预期的输入: df['found_d']= 01/07/91 or 01/07/1991

我正在尝试使用replace修改我的正则表达式。我最终想要做的是在我现有的模式前面添加01/,它几乎是在用另一个模式替换一个模式。 以下是我对“替换”所做的操作:

 df['found_d'].str.replace(pattern2, '1/'+pattern2)
 #must be str, not _sre.SRE_Pattern
我想使用sub它需要3个参数,现在我不太确定如何使用它。 以下是预期的输入:

 df['found_d']= 01/07/91 or 01/07/1991

我需要在我的模式中添加一个缺少的日期。

从版本0.20开始,pandas
str.replace
可以接受将接收匹配对象的可调用对象。例如,如果列的模式为2个大写字母后跟2个十进制数字,并且您希望在它们之间用冒号反转,则可以使用:

df['col'] = df['col'].str.replace(r'([A-Z]{2})([0-9]{2})',
                                  lamdba m: "{}:{}".format(m.group(2), m.group(1)))

它为您提供pandas内部的
re
模块的全部功能,在这里
'AB12'
更改为
'12:AB'
从版本0.20开始,pandas
str.replace
可以接受将接收匹配对象的可调用对象。例如,如果列的模式为2个大写字母后跟2个十进制数字,并且您希望在它们之间用冒号反转,则可以使用:

df['col'] = df['col'].str.replace(r'([A-Z]{2})([0-9]{2})',
                                  lamdba m: "{}:{}".format(m.group(2), m.group(1)))

它为您提供熊猫内部
re
模块的全部功能,在这里
'AB12'
更改为
'12:AB'
无需调用,
re
提供了在替换过程中访问匹配文本的专用方法

要将文本
01/
附加到模式匹配,请在替换模式中使用
\g
对整个模式的明确反向引用,而不是使用正则表达式模式:

df['found_d'] = df['found_d'].str.replace(pattern2, r'01/\g<0>')
                                                    ^^^^^^^^^^^
df['found\u d']=df['found\u d'].str.replace(pattern2,r'01/\g'))
^^^^^^^^^^^

不需要可调用项,
re
提供了在替换过程中访问匹配文本的专用方法

要将文本
01/
附加到模式匹配,请在替换模式中使用
\g
对整个模式的明确反向引用,而不是使用正则表达式模式:

df['found_d'] = df['found_d'].str.replace(pattern2, r'01/\g<0>')
                                                    ^^^^^^^^^^^
df['found\u d']=df['found\u d'].str.replace(pattern2,r'01/\g'))
^^^^^^^^^^^

df['found_d'].str='01/'+df['found_d'].str
?你能发布输入和预期输出吗?@OlvinRoght我想你的想法是对的。我不知道为什么我只关注regex
df['found_d'].str='01/'+df['found_d'].str
?你能发布输入和预期输出吗?@OlvinRoght我想你的想法是对的。我不知道为什么我只关注regexGreat。我没有想到在这里使用lambda表达式,我来试试逻辑。在这里,这些数字不存在于我的原始表达式中。我正在添加它。@Herc01:这是一个不相关的例子。为了给出一个符合您要求的正则表达式,我需要一个示例或输入字符串及其预期输出。太好了。我没有想到在这里使用lambda表达式,我来试试逻辑。在这里,这些数字不存在于我的原始表达式中。我正在添加它。@Herc01:这是一个不相关的例子。为了给出一个符合您要求的正则表达式,我需要一个示例或输入字符串及其预期输出。太棒了。这太神奇了。我不知道这件事。@Herc01很高兴它对你有用。请考虑一下投票,太棒了。这太神奇了。我不知道这件事。@Herc01很高兴它对你有用。请考虑投票。