آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

Amin_913  10 سال پیش  10 سال پیش
0 0

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

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من هم گویا مشکل داره، ولی با همین وجود نمیدونم عمل استخراج شماره از داخل درایه رو چطور انجام بدم، توی جستجوها هم فقط به راه حل هایی برای بررسی مقدار داخل متن بر اساس الگو رسیدم و چیزی از استخراج یا حذف کاراکتر های اضافی نگفته بودند.

ممنون

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

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

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));
}
+1 0
به شخصه با RegExp ها فقط در حد validation اطلاعات ورودی کار کردم ،نه استخراج اطلاعات از یک متن ،با توجه به جوابی که به سوال قبلیم دادید میتونید متن رو کاراکتر به کاراکتر برسید کنید و هروقت به + یا 0 رسیدید شروع به ذخیره رشته کنید تا وقتی که به کاراکتر بعدی یا پایان رشته برسید ،برای حذف فاصله ها هم میتونید از متد replace خود جاوا استفاده کنید یا یک if ساده.البته این راهی هسه که به ذهن من رسید حتما راه های بهتری هم هست (10 سال پیش)
0 0
من فهمیدم که امکان Skipکردن یه متن یا کاراکتر در رجکس وجود ندارد، در واقع باید گروه بندی انجام بدی و سپس گروه مورد نظرت رو برداری، و سوالی که پیش میاد اینه که چطور بدون دستورات String، فضای خالی بین اعداد رو حذف کنم؟ (10 سال پیش)
+1 0
در کلاس استرینگ متد Replace رو استفاده کنید و بگید به جای " " اینو قرار بده "" (10 سال پیش)
0 0
بنده عرض کردم بدون دستورات String، چون دستورات استرینگ به شدت سرعت عملیات رو در تعداد بالای رکورد کاهش میده (10 سال پیش)
پاسخ به سوال 
Amin_913  10 سال پیش
+4 0

جواب سوالم:

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(" ", ""));

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