Regex cách chọn năm trong chuỗi

mình muốn lấy năm, hoặc 4 kí tự đầu tiên trong chuổi
2022/05/06 10:00~
và chuổi sau:
jadaef000123
mình muốn lấy hết kí tự abc và 3 con số cuối cùng liên kết chử và số là dấu gạch ngang sau đó xuất ra ký tự sẽ in hoa
vd: JADAEF-123

chân thành cảm ơn các bạn

:stuck_out_tongue: cái này đâu cần regex đâu bạn, bạn tự parse string cũng được mà.

1 Like

Bạn refers theo Regex syntax guideline này:
https://www.cplusplus.com/reference/regex/ECMAScript/

Một số từ khoá cho bạn tìm kiếm ở trong guideline:

“4 kí tự đầu tiên trong chuổi”, “3 con số cuối cùng”

characters description condition for match
^ Beginning of line Either it is the beginning of the target sequence, or follows a line terminator.
$ End of line Either it is the end of the target sequence, or precedes a line terminator.

“hết kí tự abc”

characters description matches
\w word an alphanumeric or underscore character (same as [_[:alnum:]] ).
\W not word any character that is not an alphanumeric or underscore character (same as
characters times effects
* 0 or more The preceding atom is matched 0 or more times.
+ 1 or more The preceding atom is matched 1 or more times.

“liên kết chử và số”

characters description effects
(subpattern) Group Creates a backreference.

Sau đó thì chạy 1 vòng lặp for để đổi lowercase sang uppercase.

Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.

2 Likes

Screen Shot 2022-04-22 at 10.12.09

Để lấy số năm trong string, nếu cái năm đó nằm trong chuỗi có format ngày/tháng/năm thì mình lấy nguyên cụm ngày tháng năm, rồi sau đó tách lấy năm thôi, để kết quả sẽ chính xác hơn

Đoan này mình đoc không hiểu nên cho qua

1 Like

vd có một đoạn chuổi như sau
jasloishe0937829
mình muốn lấy hết các kí tự abcde và 3 con số cuối cùng và nối chúng lại bằng dấu gạch ngang
kq sẽ cho ra
jasloishe-829
và mình muốn viết hoa các ki tự luôn
cảm ơn các bạn

cảm ơn bạn rất nhiều

Kiếm được string cần tìm rồi thì cắt dán chỉnh sửa là xong

2 Likes

Làm thử tí :sweat_smile:

#include <iostream>
#include <regex>
using namespace std;

int main() 
{
	std::string s = "jadaef000123";
	s = std::regex_replace(s, std::regex("^([a-zA-Z]+)[0-9]*([0-9]{3}$)"), "$1-$2");
	for (char& c : s)
	{
		if (std::isalpha(c))
			c &= ~32;
	}
	cout << s << endl;
	return 0;
}

Output:
JADAEF-123

3 Likes

chân thành cảm ơn tất cả anh em đã giúp đở
THANK ALL

tại cái tool mình đang xài support regex

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?