بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

خارج کردن شماره با Regex

مدیریت گفتگو
Amin_913 11 سال پیش
آخرین تغییر: 10 سال پیش

سلام من یه آرایه ای دارم توی ستونش مقادیر زیر درج شده:

SomeText  +98 913 100 0000 Call
SomeText  +98 913 100 0001 Call

یا

SomeText  +98 913 100 0000
SomeText  +98 913 100 0001

یا

SomeText  +989131000000
SomeText  +989131000001

به عبارتی هم ممکنه بین شماره ها فضای خالی باشه، هم در ابتدا متنی با تعداد کاراکتر نامعلوم وجود داشته باشه و هم در انتها

کد من هم بصورت زیر هست:

 ArrayList<String> phoneList = new ArrayList<String>();

میخوام توی این حلقهFor، تمام درایه های ستون اول، فقط مقدار شماره تلفن رو داشته باشه بدون Spaceیا هر کاراکتر اضافه

for (String number: phoneList) {
number.matches("([0-9]{13})");
///اینجا چی باید بنویسم؟
}

کد Regexمن هم گویا مشکل داره، ولی با همین وجود نمیدونم عمل استخراج شماره از داخل درایه رو چطور انجام بدم، توی جستجوها هم فقط به راه حل هایی برای بررسی مقدار داخل متن بر اساس الگو رسیدم و چیزی از استخراج یا حذف کاراکتر های اضافی نگفته بودند.

ممنون

نظرات

Amin_913 11 سال پیش
بعد از یکسال تغییرات چشمگیری تو انجمن رخ داده، بارزترینش اینه که همه حرفه ای شدن و اینجا رو ترک کردن، و پاسخگوها رفتن!
Morteza 11 سال پیش
آیا داخل متن قبل از شماره تماس ،عدد هم وجود داره ؟ مثلا : ali25reza +989131000000 و اینکه شماره تماس ها حتما با + شروع میشود؟
Amin_913 11 سال پیش
سلام، تا الان که به همچین موردی برخورد نکردم یا بهتر بگم نه نیست، فقط بین اعداد تلفن در بعضی مواردSpace هست ویا اینکه بعد از شماره ها هم متن وجود داره، من با مثال آخر مشکلی ندارم، دستورش اینه({12}d\) ولی میخوام یه دستوری باشه که همه حالات رو دربر بگیره ممنون
ahmadHaeri 11 سال پیش
دوست عزیز میتونید چک کنید که مثلا هر کجا کاراکتر 9 وجود داشت از آنجا شروع کنه به برداشتن کارکتر ها و چک کنه که اون کارکتر عدد باشه تا زمانی که شماره کامل میشه ، اینجوری فاصله های بین شماره ها از بین میره ، ولی اگر حالت های خاصی به وجود اومد میتوند برای هر کدام از حالت ها کد بزنید و چک کنید ، فکر نمیکنم به مشکلی برخورد کنید

پاسخ‌ها 2

Amin_913 11 سال پیش

من میخوام شماره ها رو بصورت گروه برگردونه
یعنی اگر پترن رجکس، گروهی هم باشه من گروه مورد نظرم رو استخراج میکنم

Pattern pattern = Pattern.compile("/*اینجا چی بنویسم*/");
Matcher matcher = pattern.matcher(number);
while (matcher.find()) {
    System.out.println("group 1: " + matcher.group(1));
    System.out.println("group 2: " + matcher.group(2));
    System.out.println("group 3: " + matcher.group(3));
}

نظرات

Morteza 11 سال پیش
به شخصه با RegExp ها فقط در حد validation اطلاعات ورودی کار کردم ،نه استخراج اطلاعات از یک متن ،با توجه به جوابی که به سوال قبلیم دادید میتونید متن رو کاراکتر به کاراکتر برسید کنید و هروقت به + یا 0 رسیدید شروع به ذخیره رشته کنید تا وقتی که به کاراکتر بعدی یا پایان رشته برسید ،برای حذف فاصله ها هم میتونید از متد replace خود جاوا استفاده کنید یا یک if ساده.البته این راهی هسه که به ذهن من رسید حتما راه های بهتری هم هست
Amin_913 10 سال پیش
من فهمیدم که امکان Skipکردن یه متن یا کاراکتر در رجکس وجود ندارد، در واقع باید گروه بندی انجام بدی و سپس گروه مورد نظرت رو برداری، و سوالی که پیش میاد اینه که چطور بدون دستورات String، فضای خالی بین اعداد رو حذف کنم؟
کاشی زاده 10 سال پیش
در کلاس استرینگ متد Replace رو استفاده کنید و بگید به جای " " اینو قرار بده ""
Amin_913 10 سال پیش
بنده عرض کردم بدون دستورات String، چون دستورات استرینگ به شدت سرعت عملیات رو در تعداد بالای رکورد کاهش میده
Amin_913 10 سال پیش

جواب سوالم:

Pattern pattern = Pattern.compile("[^+0\\n\\r]*([+98|09][0-9\\s]+)[^\\n\\r+0]*");

برای حذف فضای خالی هم فعلا مجبورم از کلاس Stringاستفاده کنم:

System.out.println("group 1: "+ matcher.group(1).replace(" ", ""));

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .