Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 re将没有前导零的年份替换为前导零?_Python_Regex - Fatal编程技术网

如何使用Python re将没有前导零的年份替换为前导零?

如何使用Python re将没有前导零的年份替换为前导零?,python,regex,Python,Regex,我有一个包含日期字符串的字符串,“363898,卡图卢斯,公元前84-11-1” 如何使用Python re将84年替换为0084年 re.sub(r"(?=\b\d{2}-\d+-\d)", "00", '363898,Catullus,84-11-1 BC') 仅当年份正好由两位数字组成时,才会修改年份。你需要再来一杯 re.sub(r"(?=\b\d-\d+-\d)", "000", '361234,Caesar,8-12-4 BC') 还要处理个位数的年份。我将留下三位数的年份作为练

我有一个包含日期字符串的字符串,“363898,卡图卢斯,公元前84-11-1” 如何使用Python re将84年替换为0084年

re.sub(r"(?=\b\d{2}-\d+-\d)", "00", '363898,Catullus,84-11-1 BC')
仅当年份正好由两位数字组成时,才会修改年份。你需要再来一杯

re.sub(r"(?=\b\d-\d+-\d)", "000", '361234,Caesar,8-12-4 BC')
还要处理个位数的年份。我将留下三位数的年份作为练习:)

仅当年份正好由两位数字组成时,才会修改年份。你需要再来一杯

re.sub(r"(?=\b\d-\d+-\d)", "000", '361234,Caesar,8-12-4 BC')
还要处理个位数的年份。我会留下三位数的年份作为练习:)

试试:

import re
re.sub(r',(\d\d)-', r',00\1-', '363898, Catullus,84-11-1 BC')
使用
r',(\d\d)-“
我们捕获逗号和破折号之间的任何一对数字(不少于或多于)。我们用一个逗号、两个零、第一对括号(这里是两个数字)和一个破折号来替换整个匹配

这意味着:

  • 如果昏迷和破折号之间没有两个数字,则不进行更换。你可以找回你原来的字符串
  • 如果有这些数字,则有替换,由相同的逗号和破折号包围,但有额外的零
在Python中尝试正则表达式时,只需使用一个完整的免责声明:我编写了这个,所以我有偏见

但是,正则表达式可能不是最适合这项工作的。有时,很好地使用普通函数也很好:

In [10]: entry = '363898,Catullus,84-11-1 BC'.split(',')
In [11]: numbers = entry[-1].split('-')
In [12]: numbers = '-'.join([numbers[0].zfill(4)] + numbers[1:])
In [13]: entry = entry = ','.join(entry[:-1] + [numbers])
In [14]: entry
Out[14]: '363898,Catullus,0084-11-1 BC'
尝试:

使用
r',(\d\d)-“
我们捕获逗号和破折号之间的任何一对数字(不少于或多于)。我们用一个逗号、两个零、第一对括号(这里是两个数字)和一个破折号来替换整个匹配

这意味着:

  • 如果昏迷和破折号之间没有两个数字,则不进行更换。你可以找回你原来的字符串
  • 如果有这些数字,则有替换,由相同的逗号和破折号包围,但有额外的零
在Python中尝试正则表达式时,只需使用一个完整的免责声明:我编写了这个,所以我有偏见

但是,正则表达式可能不是最适合这项工作的。有时,很好地使用普通函数也很好:

In [10]: entry = '363898,Catullus,84-11-1 BC'.split(',')
In [11]: numbers = entry[-1].split('-')
In [12]: numbers = '-'.join([numbers[0].zfill(4)] + numbers[1:])
In [13]: entry = entry = ','.join(entry[:-1] + [numbers])
In [14]: entry
Out[14]: '363898,Catullus,0084-11-1 BC'

什么样的“日期”是公元前84-11-1年卡图卢斯的363898?它遵循的格式是什么?在我们对您的问题投入精力之前,请向我们展示您投入了哪些精力。你试过什么?你读过哪些文件?你读过吗?我试着匹配年份,如果它只有两个数字,后跟一个逗号(即84或76)和“\\,\d\d”,但逗号没有被转义。我似乎错过了一件非常琐碎的事情。这不是一个数据,我猜363898是一个id,卡图卢斯是一个可能出生于公元前84年的人,月和日似乎是任意的,是一个相当奇怪的选择。您需要更好地格式化数据,并将其拆分为各个组成部分。@Sravan,您正在用“\\\”来转义斜杠。另外,你不必逃避逗号。什么样的“日期”是363898,卡图卢斯,公元前84-11-1年?它遵循的格式是什么?在我们对您的问题投入精力之前,请向我们展示您投入了哪些精力。你试过什么?你读过哪些文件?你读过吗?我试着匹配年份,如果它只有两个数字,后跟一个逗号(即84或76)和“\\,\d\d”,但逗号没有被转义。我似乎错过了一件非常琐碎的事情。这不是一个数据,我猜363898是一个id,卡图卢斯是一个可能出生于公元前84年的人,月和日似乎是任意的,是一个相当奇怪的选择。您需要更好地格式化数据,并将其拆分为各个组成部分。@Sravan,您正在用“\\\”来转义斜杠。另外,您不必避开逗号。非常感谢您,需要做哪些修改才能使年从一位数变为四位数,如8-11-1到0008-11-1?对于非正则表达式版本,无需修改。这就是重点。使用regex版本,您可以很容易地找到它:(\d\d)表示两位数\d代表一位数字。在替换模式中,\1表示括号中的任何内容,其余部分为常量。在我给你的正则表达式测试仪中使用值,你会找到自己的方法。@Tim Pietzcker:谢谢你的编辑。多年的练习,但我的英语仍然很糟糕。我被一个德国人纠正了:-谢谢你,需要做什么修改才能使年从一位数变成四位数,比如8-11-1到0008-11-1?对于非正则表达式版本,没有修改。这就是重点。使用regex版本,您可以很容易地找到它:(\d\d)表示两位数\d代表一位数字。在替换模式中,\1表示括号中的任何内容,其余部分为常量。在我给你的正则表达式测试仪中使用值,你会找到自己的方法。@Tim Pietzcker:谢谢你的编辑。多年的练习,但我的英语仍然很糟糕。我被一个德国人纠正了:-D