每个组开头不匹配 0 的正则表达式
Regex that doesnt match 0 at the beginning for every group
- 01 Ded.PASIVIC 05-01-2016.xlsx
- 01 Ded.PASIVIC 15-01-2016.xlsx
- 01 Ded.PASIVIC 10-01-2016.xlsx
- 06 DED。帕西维克 30-03-2016 (1).xlsx
- 19 被动演绎 DEL 15-10-2016.xlsx (2)
- 23 被动演绎 DEL 15-12-2016.xlsx (1)
- 18 APORTE PASIVIC DEL 30-09-2016.xlsx
我想获取上面 文件名上打印的日期
但没有前导零。
我不想像上面那样获取整个日期,我想获取第一个文件 5-1-2016,第二个文件 15-1-2016,对于第三个 10-1-2016 等等(没有前导零) .
预期的输出应该是这样的:
- 5-1-2016
- 15-1-2016
- 2016 年 10 月 1 日
- 30-3-2016
- 15-10-2016
- 15-12-2016
- 2016-9-30
我在 python 上做这个。
您可以使用 re.findall
和 re.sub
分两步完成:
import re
data = """
01 Ded.PASIVIC 05-01-2016.xlsx
01 Ded.PASIVIC 15-01-2016.xlsx
01 Ded.PASIVIC 10-01-2016.xlsx
06 DED. PASIVIC 30-03-2016 (1).xlsx
19 DEDUCCION PASIVIC DEL 15-10-2016.xlsx (2)
23 DEDUCCION PASIVIC DEL 15-12-2016.xlsx (1)
18 APORTE PASIVIC DEL 30-09-2016.xlsx
"""
matches = re.findall('(?:[0-9]{2}-){2}[0-9]{4}',data)
print(re.sub('0(?=[0-9]-)','',str(matches)))
打印:
['5-1-2016', '15-1-2016', '10-1-2016', '30-3-2016', '15-10-2016', '15-12-2016', '30-9-2016']
您可以匹配 3 个组,前 2 个组匹配一个可选的零,然后捕获 1 或 2 次数字 0?([0-9]{1,2}-)
,然后是破折号。
您可以在开头和结尾添加 word boundary \b
。
^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$
然后你可以使用 sub 并在替换中使用捕获组:
</code></p>
<pre><code>import re
regex = r"^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$"
test_str = "01 Ded.PASIVIC 05-01-2016.xlsx"
subst = r""
result = re.sub(regex, subst, test_str, 1)
if result:
print (result) # 5-1-2016
以最原始的方式,我将采用此解决方案:
([1-9])([0-9])-([0-9]+)-([0-9]+)|([0-9])-([0- 9]+)-([0-9]+)
- 01 Ded.PASIVIC 05-01-2016.xlsx
- 01 Ded.PASIVIC 15-01-2016.xlsx
- 01 Ded.PASIVIC 10-01-2016.xlsx
- 06 DED。帕西维克 30-03-2016 (1).xlsx
- 19 被动演绎 DEL 15-10-2016.xlsx (2)
- 23 被动演绎 DEL 15-12-2016.xlsx (1)
- 18 APORTE PASIVIC DEL 30-09-2016.xlsx
我想获取上面 文件名上打印的日期
但没有前导零。
我不想像上面那样获取整个日期,我想获取第一个文件 5-1-2016,第二个文件 15-1-2016,对于第三个 10-1-2016 等等(没有前导零) .
预期的输出应该是这样的:
- 5-1-2016
- 15-1-2016
- 2016 年 10 月 1 日
- 30-3-2016
- 15-10-2016
- 15-12-2016
- 2016-9-30
我在 python 上做这个。
您可以使用 re.findall
和 re.sub
分两步完成:
import re
data = """
01 Ded.PASIVIC 05-01-2016.xlsx
01 Ded.PASIVIC 15-01-2016.xlsx
01 Ded.PASIVIC 10-01-2016.xlsx
06 DED. PASIVIC 30-03-2016 (1).xlsx
19 DEDUCCION PASIVIC DEL 15-10-2016.xlsx (2)
23 DEDUCCION PASIVIC DEL 15-12-2016.xlsx (1)
18 APORTE PASIVIC DEL 30-09-2016.xlsx
"""
matches = re.findall('(?:[0-9]{2}-){2}[0-9]{4}',data)
print(re.sub('0(?=[0-9]-)','',str(matches)))
打印:
['5-1-2016', '15-1-2016', '10-1-2016', '30-3-2016', '15-10-2016', '15-12-2016', '30-9-2016']
您可以匹配 3 个组,前 2 个组匹配一个可选的零,然后捕获 1 或 2 次数字 0?([0-9]{1,2}-)
,然后是破折号。
您可以在开头和结尾添加 word boundary \b
。
^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$
然后你可以使用 sub 并在替换中使用捕获组:
</code></p>
<pre><code>import re
regex = r"^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$"
test_str = "01 Ded.PASIVIC 05-01-2016.xlsx"
subst = r""
result = re.sub(regex, subst, test_str, 1)
if result:
print (result) # 5-1-2016
以最原始的方式,我将采用此解决方案:
([1-9])([0-9])-([0-9]+)-([0-9]+)|([0-9])-([0- 9]+)-([0-9]+)