Làm thế nào tôi có thể phân tích cú pháp. Trong Python để trích xuất năm:
'years since 1250-01-01 0:0:0'
Câu trả lời phải là 1250
KAME
Phù hiệu vàng 19.7k30 Huy hiệu bạc150 Huy hiệu đồng30 gold badges101 silver badges150 bronze badges
Hỏi ngày 19 tháng 10 năm 2016 lúc 3:54Oct 19, 2016 at 3:54
user308827user308827user308827
18.6K79 Huy hiệu vàng238 Huy hiệu bạc389 Huy hiệu đồng79 gold badges238 silver badges389 bronze badges
Có tất cả các loại cách để làm điều đó, đây là một số tùy chọn:
1 trình phân tích cú pháp trong chế độ "mờ":In [1]: s = 'years since 1250-01-01 0:0:0' In [2]: from dateutil.parser import parse In [3]: parse[s, fuzzy=True].year # resulting year would be an integer Out[3]: 1250
In [1]: s = 'years since 1250-01-01 0:0:0' In [2]: from dateutil.parser import parse In [3]: parse[s, fuzzy=True].year # resulting year would be an integer Out[3]: 1250
Biểu thức thường xuyên với một nhóm bắt giữ:
In [2]: import re In [3]: re.search[r"years since [\d{4}]", s].group[1] Out[3]: '1250'
chia tách bởi "kể từ" và sau đó bằng một dấu gạch ngang:
In [2]: s.split["since", 1][1].split["-", 1][0].strip[] Out[2]: '1250'
hoặc thậm chí có thể bị chia tách bởi dấu gạch ngang đầu tiên và cắt phần đầu tiên:
In [2]: s.split["-", 1][0][-4:] Out[2]: '1250'
Hai phần cuối liên quan đến nhiều "bộ phận chuyển động" hơn và có thể không được áp dụng tùy thuộc vào các biến thể có thể của chuỗi đầu vào.
Đã trả lời ngày 19 tháng 10 năm 2016 lúc 3:59Oct 19, 2016 at 3:59
Alecxealecxealecxe
449K114 Huy hiệu vàng1043 Huy hiệu bạc1167 Huy hiệu đồng114 gold badges1043 silver badges1167 bronze badges
2
Bạn có thể sử dụng một regex với một nhóm chụp xung quanh bốn chữ số, đồng thời đảm bảo bạn có một mẫu cụ thể xung quanh nó. Tôi có lẽ sẽ tìm kiếm một cái gì đó mà:
4 chữ số và chụp
2In [1]: s = 'years since 1250-01-01 0:0:0' In [2]: from dateutil.parser import parse In [3]: parse[s, fuzzy=True].year # resulting year would be an integer Out[3]: 1250
Bạch cầu
3In [1]: s = 'years since 1250-01-01 0:0:0' In [2]: from dateutil.parser import parse In [3]: parse[s, fuzzy=True].year # resulting year would be an integer Out[3]: 1250
Hai chữ số
4In [1]: s = 'years since 1250-01-01 0:0:0' In [2]: from dateutil.parser import parse In [3]: parse[s, fuzzy=True].year # resulting year would be an integer Out[3]: 1250
Bạch cầu
3In [1]: s = 'years since 1250-01-01 0:0:0' In [2]: from dateutil.parser import parse In [3]: parse[s, fuzzy=True].year # resulting year would be an integer Out[3]: 1250
Hai chữ số
4In [1]: s = 'years since 1250-01-01 0:0:0' In [2]: from dateutil.parser import parse In [3]: parse[s, fuzzy=True].year # resulting year would be an integer Out[3]: 1250
Cho đi:
In [1]: s = 'years since 1250-01-01 0:0:0'
In [2]: from dateutil.parser import parse
In [3]: parse[s, fuzzy=True].year # resulting year would be an integer
Out[3]: 1250
7Demo:
>>> import re
>>> d = re.findall['[\d{4}]-\d{2}-\d{2}', 'years since 1250-01-01 0:0:0']
>>> d
['1250']
>>> d[0]
'1250'
Nếu bạn cần nó như một INT, chỉ cần đúc nó như vậy:
>>> int[d[0]]
1250
Đã trả lời ngày 19 tháng 10 năm 2016 lúc 3:59Oct 19, 2016 at 3:59
1
Alecxealecxe
^.*\[d{4}]-\d{2}-\d{2}.*$
449K114 Huy hiệu vàng1043 Huy hiệu bạc1167 Huy hiệu đồngOct 19, 2016 at 4:00
Bạn có thể sử dụng một regex với một nhóm chụp xung quanh bốn chữ số, đồng thời đảm bảo bạn có một mẫu cụ thể xung quanh nó. Tôi có lẽ sẽ tìm kiếm một cái gì đó mà:Tim Biegeleisen
4 chữ số và chụp
224 gold badges254 silver badges331 bronze badgesIn [1]: s = 'years since 1250-01-01 0:0:0'
In [2]: from dateutil.parser import parse
In [3]: parse[s, fuzzy=True].year # resulting year would be an integer
Out[3]: 1250
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọc
Input : test_str = "gfg at 2021-01-04" Output : 2021-01-04 Explanation : Date format string found. Input : test_str = "2021-01-04 for gfg" Output : 2021-01-04 Explanation : Date format string found.
Bàn luậnre.search[] + strptime[] methods
Đưa ra một chuỗi, nhiệm vụ là viết một chương trình Python để trích xuất ngày từ nó.
Python3
Phương pháp số 1: Sử dụng phương thức re.search [] + strptime []
Trong đó, nhóm tìm kiếm cho một ngày cụ thể được đưa vào tìm kiếm [] và strptime [] được sử dụng để cung cấp theo định dạng để tìm kiếm.
In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
4In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
5 In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
6In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
7In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
8In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
9 In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
0 In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
1In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
2In [1]: s = 'years since 1250-01-01 0:0:0'
In [2]: from dateutil.parser import parse
In [3]: parse[s, fuzzy=True].year # resulting year would be an integer
Out[3]: 1250
8 In [1]: s = 'years since 1250-01-01 0:0:0'
In [2]: from dateutil.parser import parse
In [3]: parse[s, fuzzy=True].year # resulting year would be an integer
Out[3]: 1250
9In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
0 In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
1In [1]: s = 'years since 1250-01-01 0:0:0'
In [2]: from dateutil.parser import parse
In [3]: parse[s, fuzzy=True].year # resulting year would be an integer
Out[3]: 1250
8 In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
3In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
3In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
5 In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
5In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
6In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
7Output:
The original string is : gfg at 2021-01-04 Computed date : 2021-01-04
8In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
5 In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
0In [2]: s.split["-", 1][0][-4:]
Out[2]: '1250'
1In [2]: s.split["-", 1][0][-4:]
Out[2]: '1250'
2python-dateutil[] moduleIn [2]: s.split["-", 1][0][-4:]
Out[2]: '1250'
Đây là một cách khác để giải quyết vấn đề này. Trong thư viện Python Python sẵn có này, phương thức parse [] có thể được sử dụng để phát hiện ngày và thời gian trong một chuỗi. & Nbsp;
Python3
In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
0 >>> import re
>>> d = re.findall['[\d{4}]-\d{2}-\d{2}', 'years since 1250-01-01 0:0:0']
>>> d
['1250']
>>> d[0]
'1250'
0In [1]: s = 'years since 1250-01-01 0:0:0'
In [2]: from dateutil.parser import parse
In [3]: parse[s, fuzzy=True].year # resulting year would be an integer
Out[3]: 1250
8 >>> import re
>>> d = re.findall['[\d{4}]-\d{2}-\d{2}', 'years since 1250-01-01 0:0:0']
>>> d
['1250']
>>> d[0]
'1250'
2In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
4In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
5 In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
6In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
7In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
8In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
9 In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
0 In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
1In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
2In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
8In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
5 >>> int[d[0]]
1250
4In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
5>>> int[d[0]]
1250
6>>> int[d[0]]
1250
7In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
7In [2]: import re
In [3]: re.search[r"years since [\d{4}]", s].group[1]
Out[3]: '1250'
8In [2]: s.split["-", 1][0][-4:]
Out[2]: '1250'
5 In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
0 In [2]: s.split["since", 1][1].split["-", 1][0].strip[]
Out[2]: '1250'
1^.*\[d{4}]-\d{2}-\d{2}.*$
3^.*\[d{4}]-\d{2}-\d{2}.*$
4^.*\[d{4}]-\d{2}-\d{2}.*$
5Output:
The original string is : gfg at 2021-01-04 Computed date : 2021-01-04