سلام . من میخوام برای حذف لینک اینترنتی از متن عبارت منظم بنویسم . هر مدلی مینویسم کل متن پاک میشه
کسی میتونه کمکم کنه؟
سلام . من میخوام برای حذف لینک اینترنتی از متن عبارت منظم بنویسم . هر مدلی مینویسم کل متن پاک میشه
کسی میتونه کمکم کنه؟
کدتون رو قرار بدید
سلام
من میخوام اینو مثلا حذف کنم
https;/t.co/hjgjh
نوشتم
https;//a-z.a-z/a-z
همه حذف شد!!
یا
این
(?<=href=").+?(?=")
فقط h رو پاک کرد
سلام
کسی نمیدونه؟
البته گفتم کدتون رو بذارید نه فقط regex، همچینن لینک اینترنتی رو اشتباه نوشتید. با این حال عبارت منظم لینک اینترنتی ساختارهای پیچیده تری هم داره برای همین بهتره از یک وبسایت معتبر عبارت منظمش رو بگیرید (برای url, email,... وجود داره)
اما بر اساس این لینک (هر چند قابل اتکا نیست و جهت مثال مطرح می کنم): https://stackoverflow.com/questions/...ext-using-java
مثال:
import java.util.regex.Matcher;import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "Hi, visit my website at https: //t.co/hjgjh , hope you like it";
String textWithoutUrl = removeUrl(text);
System.out.println(textWithoutUrl);
}
public static String removeUrl(String commentstr)
{
String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http): ((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)";
Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIV E);
Matcher m = p.matcher(commentstr);
int i = 0;
while (m.find()) {
commentstr = commentstr.replaceAll(m.group(i),"").trim();
i++;
}
return commentstr;
}
}
توجه کنید، لینک داخل متن، بین https: و // فاصله گذاشتم چون موقع پست کردن کد رو خراب میکرد. اگر کپی پیست کردید، اون فاصله رو حذف کنید.
خروجی:
Hi, visit my website at , hope you like it
جهت تکمیل. کد بالا نمیتونه www.google.com رو حذف کنه. در کل regex برای url هم یکم سرچ بیشتر میخواد که کدوم جامعتره و اون رو استفاده کنید. با این حال، بر اساس این لینک https://code.tutsplus.com/tutorials/...know--net-6149 عبارت منظم زیر رو پیشنهاد کرده:
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
که در کد به صورت زیر قرار بدیم:
String urlPattern = "((https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?)";
اونوقت اگر ورودی
Hi, see my website at https://t.co/hjgjh , hope you like it or visit www.google.com
باشه، خروجی میشه:
Hi, see my website at , hope you like it or visit
هر چند واضحه اگر لینکی به صورت ftp://google.com باشه، ftp:// حذف نمیشه. یا file:// و... . یکم نیاز به جستجو بیشتر دارید تا ببینید چیو دقیقا میخواید و کدوم باهاش همخوانی داره. ممکنه هم یکی حالت کلی براش مهم باشه و محدود نکنه به پروتکل های شناخته شده و مهم نباشه http باشه یا ali یا ahmad و... ! یعنی حساس به پروتکل نباشه.
موفق باشید
سلام
خیلی ممنونم
با تشکر فراوان
آخرین ویرایش به وسیله mani2000 : پنج شنبه 06 اردیبهشت 1397 در 09:10 صبح
فایل اکسلتون اگر csv باشه یا به عبارتی سطرها با ویرگول مشخص شدند که مثل هر فایل تکست دیگه ای میشه خوند و عبارات با ویرگول جدا شدند.
آموزشش به انگلیسی که فراوون هست، اما به فارسی هم پیدا میشه:
https://oruji.org/java/csv/read/
اگر هم فرمت xlsx است باید از کتابخونه برای اینکار استفاده کنید که با سرچ میتونید نمونه هاییش رو مثل نمونه زیر پیدا کنید:
https://github.com/monitorjbl/excel-streaming-reader
صد البته کار کردن باهاشون یکم وقت گذاشتن و مطالعه مستنداتش رو میخواد.
ضمنا سوالتون تشابه خاصی با سوال این تاپیک ( https://barnamenevis.org/showthread.php?547798 ) داره و شاید بتونید به هم کمک کنید!
سلام. ممنون از راهنمایی تون
من با کتابخانه جاوا امتحان کردم
اما خطا داره
ممنون میشم راهنمایی کنید
ex.rar
آخرین ویرایش به وسیله mani2000 : پنج شنبه 06 اردیبهشت 1397 در 09:11 صبح
من کدتون رو بررسی نکردم ولی با توجه به لینکی که دادید گفته:
یعنی نسخه های جدید با فرمت xlsx رو پشتیبانی نمیکنه پس استفاده کردنش اشتباهه برای فرمت های جدید (و این کتابخونه خیلی قدیمیه).As we know JXL doesn't support Excel 2007 ".xlsx" file format. It only supports the old BIFF (binary) ".xls" format. Where as Apache POI supports both Excel 2003 - xls and Excel 2007 - xlsx file formats.
بهتره از کتابخونه های دیگه استفاده کنید. که لینک یکیشو دادم در پست قبل.
همچنین اگر اجباری در استفاده از فایل xlsx ندارید از طریق برنامه excel اون رو به csv تبدیل کنید اونوقت چیزی جز یک متن جدا شده با ویرگول نیست که طبق لینک آموزشی که پست قبل لینکشو دادم میتونید سطرها و ستون هاش رو بخونید.
ممکنه لطف کنید ببینید کدم درسته یا نه؟؟؟
هر مدلی مینویم همینه..
خواهش میکنم...
گفتم که xlsx رو پشتیبانی نمیکنه. تو کدتون هم از xlsx استفاده کردید پس جواب نمیده!
همون راه هایی که تو پست قبلی گفتم پیش بگیرید. البته با اون کتابخونه کار نکردم، ولی اگر به csv تبدیل کنید دیگه نیازی به کتابخونه ندارید و طبق آموزشی که لینکش رو دادم پیش برید.
سلام
فایل اکسل رو خوندم و داخلش حذف کردم
چطور خروجی جدید رو در یک فایل اکسل دیگه بنویسم؟؟امکان داره؟
میشه خروجی رو بصورت جدول نشون داد؟
وقتی لینک پاک شد ، میشه جای اون بنویسم مثلا "لینک" ؟
ممنون میشم راهنمایی کنید
سلام با این کد در تابع read
اطلاعات رو با دو تا حلقه خوندم و لینک و پاک کردم
اما در تابع write هرچی میخوام بگم temp1 رو بنویس نمیشناسدش.. هر مدل هم سراسری تعریفش کردم باز نشد
باید چه کنم؟
ممنون میشم راهنمایی کنید.
String temp1=(sheet1.getCell(0, row).getContents() + "\t");
String textWithoutUrl = removeUrl(temp1);
در write
Label text = new Label(col, row, temp1);
writableSheet.addCell(text);
writableWorkbook.write();
یا روی temp1 خطا داره یا روی writableWorkbook و writableWorkbook
??
سلام
یکی راهنمایی کنه لطفا..
من هر کاری کردم نتونستم داده ها ها رو بخونم و بنویسم در اکسل
این apache pol چیه؟
اول اینکه بدون کد نمیشه تست کرد!
اما بهتره در مورد کتابخونه های غیر استاندارد جاوا در اینترنت جستجو کنید و سریعتر به جواب میرسید چون یکی دو تا نیست که بشه یکی رو پیدا کرد تسلط داشته باشه، هر چند این کتابخونه ها چیز خاصی نیست و با یکم وقت گذاشتن میشه فهمید چیا داره.
اون کتابخونه ای که گفتم excel-streaming-reader از اسمشم مشخصه که قابلیت نوشتن نداره و فقط میخونه.
اما مشخص نیست شما از کدوم استفاده کردید. اگر از apache poi استفاده کردید میتونید فایل بنویسید. تو این مثال توضیح داده: https://www.mkyong.com/java/apache-p...-file-in-java/
اگر از jxl استفاده می کنید هم که چون قدیمیه اصلا سراغش نرید که بخواد مشکل داشته باشه یا نه.
بعدشم اگر دیدید نمیتونید با این کتابخونه ها برای نوشتن کار کنید و جواب بگیرید و خطا میده، راحت csv ذخیره کنید و به راحتی با اکسل باز میشه (لینک توضیحات در مورد csv هم قبلا گذاشتم)
mani2000 تونستن فایل رو بخونن و کارهایی که میخوان رو روش انجام بدن و فقط در ذخیرش مشکل دارن. فکر کنم کدشون بتونه به شما هم کمک کنه
سلام
ممنون
فقط من از همون xls استفاده کردم.
کد رو گذاشتم ، میشه راهنمایی کنید؟ از Apache poi هر کاری کردم نتونستم استفاده کنم. ..! خواهش میکنم آقای مهندس محبت کنید و راهنمایی کنید از صبح درگیرشم. ..
میشه خروجی رو بصورت جدول نشون داد؟
وقتی لینک پاک شد ، میشه جای اون مثلا بنویسم "لینک"؟
منظورم از کد، کد کامل قابل اجرا و در نتیجه قابل تست بود (بعلاوه یک فایل نمونه اکسلتون).
البته من با jxl و بقیه کار نکردم ولی با یک نمونه مقایسه کردم اون تکه کد درسته. ممکنه اشتباه جای دیگه ای باشه که با این چند خط کدی که گذاشتید نه میشه فهمید مشکل چیه و نه میشه تستش کرد.
تو لینک روبرو نحوه نوشتن یک فایل xls رو در چند خط و به صورت کوتاه توضیح داده که اول بهتره اون رو تست کنید و ببینید جواب میگیرید بعدا رو کد خودتون اعمال کنید: https://www.mkyong.com/java/jexcel-a...-file-in-java/
سلام
ممنونم حق با شماست
الان دسترسی ندارم کد رو بفرستم
بله کدم رو دقیقا براساس لینک ارسالی شما نوشتم . من میخوام به جای مثلا عبارات توی کتیشن توی label ها، با حلقه ستون های اصلاح شده یک فایل اکسل رو بنویسم که خطا داره و نمیشناسه
??
این کل کدمه
آخرین ویرایش به وسیله mani2000 : جمعه 31 فروردین 1397 در 11:17 صبح
سلام
ممنونم حق با شماست
الان دسترسی ندارم کد رو بفرستم
بله کدم رو دقیقا براساس لینک ارسالی شما نوشتم . من میخوام به جای مثلا عبارات توی کتیشن توی label ها، با حلقه ستون های اصلاح شده یک فایل اکسل رو بنویسم که خطا داره و نمیشناسه
آخرین ویرایش به وسیله mani2000 : پنج شنبه 06 اردیبهشت 1397 در 09:18 صبح
خیلی وقت ها مشکل چیزی هست که شما فکرشو نمیکنید و برای همین یک قسمت از کد کافی نیست.
هر چند انتظار داشتم تمام کد (پروژه) رو بذارید و با اسکرین شات (که باز هم ناقص هست) گاهی اوقات لازمه مثلا من بیام تایپ کنم و اجرا کنم ببینم مشکل چیه (که فکر نمیکنم کسی حوصله چنین کاری رو داشته باشه).
اما خوشبختانه در این مورد به خصوص خود Eclipse کامل توضیح داده مشکل چیه. میگه که WriteException رو هندل نکردید. باید در catch هاتون یکی هم اضافه کنید برای WriteException. اصلا همون چیزی که بالا اومده گزینه Add catch clause to surrounding try رو بزنید و خودش این کار رو انجام میده.
بعد گفتید
در صورتی که در اون لینکی که دادم WriteException رو catch کرده ولی شما این کار رو نکردید. برای همینه اصرار میکنم کد رو بذارید چون ممکنه بی دقتی کرده باشید که بدون داشتنش باید کلی روش بحث بشه در صورتی که از اول میشد به مشکل پی بردبله کدم رو دقیقا براساس لینک ارسالی شما نوشتم
آخرین ویرایش به وسیله vahid-p : جمعه 31 فروردین 1397 در 20:00 عصر
استاد که نیستم و اتفاقا این مشکلی که بود پایه ای بود.
به هر حال هر وقت به کدتون دسترسی داشتید و اینجا قرارش دادید (نه اسکرین شات) و قابل تست باشه، اگر متوجه مشکلش شدم، بهتون اطلاع میدم
سلام
جناب مهندس یه مشکل پیش آمده
دو روز هست درگیر هستم اما نتونستم درستش کنم
اینکه وقتی عبارت منظم که لطف کردید دادین رو استفاده میکنم
کلماتی که بعدش سه نقطه هست
مثل
About...
در متن باشه. به همراه لینک ها حذف میشن
کل about...
حذف میشه.
باید چه کنم که لینک حذف بشه و این کلمه بمونه و اون سه نقطه بعدش حذف بشه
ممنون میشم راهنمایی کنید
حق با شماست. regex پست شماره 6 هم مشکل داره. نمیدونم کجا میشه کاملترین و بهترین regex رو پیدا کرد.
علتش هم فکر میکنم این قسمت باشه:
([a-z,\.]{2,6})
چون مثلا about... نقطه اول رو در عبارت قبلی و دو نقطه بعد رو با این عبارت مچ میکنه. اگر به صورت زیر بنویسید:
([a-z]{2,6})
این مشکل حل میشه ولی شاید باعث به وجود اومدن موارد دیگه ای بشه.
همچنین در قسمت
([\/\w \.-]*)
یک فضای خالی (space) وجود داره که باعث میشه اگر بنویسید example.ir/sdd asas قسمت asas رو هم با این لینک یکجا در نظر میگیره و تا آخر خط میره. برای همین این space رو هم باید حذف کنید.
حتی % و # و ? هم پس از / در url مجاز هست که این regex در نظر نمیگیره. حتی : هم پس از آدرس دامنه ممکنه باشه (دیدید مینویسن example.ir:8080 و...)
مشکلات دیگه ای اگر داشته باشه نمیدونم. در کل regex نوشتن برای این مواردی که حالات مختلف زیادی دارن چندان ساده نیست. لااقل من تعریف دقیق فرمت یک url رو نمیدونم.
آخرین ویرایش به وسیله vahid-p : دوشنبه 10 اردیبهشت 1397 در 20:04 عصر
سلام
ممنون مهندس
فقط
امکان داره اول لینک ها با همون عبارتی که دادید حذف بشه بعد با یک عبارت منظم دیگه فرمت www.google.com/hjjhg
حذف بشه؟
عبارتی برای فرمتwww.google.com/hjjhg دارید؟
ممنون
همون عبارت این فرمتی که گفتید هم حذف میکنه.
این مثال رو ببینید: https://regexr.com/3ouav
تو این سایت میتونید هر عبارتی رو تست کنید. قطعا یکبار که عباراتی رو حذف کردید و نتیجه یک string باشه، خب چرا نشه دوباره همین کار رو با یک عبارت regex دیگه انجام داد؟ فرقی نمیکنه
سلام
آقای مهندس
ممنون از راهنمائی شما
الان من میخوام کلماتی مثل Ic رو با i see جایگزین کنم .
با عبارت منظم امکانش هست؟
من نوشتم
ReplaceAll ("ic","I see");
اما میاد کل Ic های موجود در بقیه کلمات رو هم حذف و با i see جایگزین می کنه.
باید چه کنم که آنهایی که کلمه Ic هستند رو جایگزین کنه.؟
ممنون میشم راهنمایی کنید
دوست عزیز!
بهتره برای اینکه بتونید با عبارت های با قاعده Regular expression بهتر کار کنید تو همین گوگل جستجو کنید فیلم های آموزشی زیادی هست که میتونید استفاده کنید البته به زبان جاوا اسکریپت بیشتر هست ولی تفاوتی زیادی نداره فقط کلاس هاشون فرق میکنه وگرنه Regex کلا به یک قاعده استفاده میشه!
مطمن باشید مشکلتون حل میشه!
سلام
ممنون از شما
بله من برای یک کلمه میتونم انجام بدم
اما نمیدونم برای یک متن بلند و چندین کلمه چطور چک کنم
من لیست کلماتی که باید به جای مخفف جایگزین بشن رو دارم
اما نمیدونم چطور توی برنامه متنم رو با فایل لیست کلمات مقایسه و جایگزین کنم؟
ممنون میشم دوستان راهنمایی بفرمایند.
آخرین ویرایش به وسیله mani2000 : سه شنبه 18 اردیبهشت 1397 در 12:27 عصر
کاری که شما می خواهید را می تونید با متد های کلاس String انجام بدید کافی متدهای این کلاس را مطالعه کنید ولی می تونید بایک حلقه کل رشته را جستجو کنید وحرف های مد نظر خودتون را جایگزین کنید.
معمولا از عبارتهای باقاعده برای یکپارچگی داده ها استفاده میشه مثلا کنترل کلمات وارد شده در کلمه عبور تو سمت سرور برای جلوگیری از SQL injection البته نه اینکه نشه کارهای دیگه ای باهشون کرد مثلا میتونید تو یک خط کدی بنویسید که بین اعداد جدا کننده قرار بده.
public static String setSeparatorToNumeric(String valueStr) {
Pattern pattern = Pattern.compile("(-?[0-9]+)([0-9]{3})");
Matcher matcher ;
while ((matcher = pattern.matcher(valueStr)).find(0)) {
valueStr = matcher.replaceFirst("$1,$2");//group 1 group 2
}
return valueStr;
}
خیلی تشکر
ببینید
من یک فایل متنی دارم داخلش اینجوری نوشتم
Ic I see
Dr direct message
.
.
.
حالا میخوام توی متن ام که اون رو اسپلیت کردم و ریختم توی ارایه . هرجا کلمه Ic بود از فایل متنی معادل اون i see رو بزاره و همین طور برای بقیه کلمات
باید چطور بنویسم؟
ممنون میشم راهنمایی کنید
کسی میدونه مشکل چیه
؟
آخرین ویرایش به وسیله mani2000 : شنبه 22 اردیبهشت 1397 در 09:14 صبح
کسی نیست؟؟؟؟؟؟؟؟؟؟؟
خواهش می کنم راهنمایی کنید
دو روز درگیرشم درست نمیشه...
؟؟؟؟؟؟؟؟؟؟؟؟
سلام
دوستان کسی نیست راهنمایی کنه؟
خواهش میکنم جناب مهندس vahid راهنمایی بفرمایید
دوست عزیز این برنامه را دانلود کن http://www.ultrapico.com/ExpressoDownload.htm
تو خودش کلی مثال برای آموزش REGEX هست والبته خودتم میتونی به راحتی عبارت های جدید بنویسی امکان نداره نتونی مشکلتو حل کنی.
اینم یک پیش درآمد کوچولو...
'a\' یک زنگ هشدار تطبیق می دهد . u0007\ مقدار هگز
'b\' اگر درون یک جفت [] قرار بگیرد Back space را تطبیق خواهد داد . u0008\
't\' تطبیق یک تب در رشته. u0009\
'r\' کاراکتر Carriage Return را در رشته تطبیق می دهد. u000D\
'v\' کاراکتر Vertical Tab را تطبیق خواهد داد. u000B\
'f\' کاراکتر Form Feed را تطبیق می دهد. u000C\
'n\' کاراکتر new line را تطبیق می دهد.u000A\
'e\' یک Esc را تطبیق می دهد.u001B\
'040\' یک کاراکتر در مبنای 8 را تطبیق می دهد. 040 به یک space اشاره دارد
'x20\' یک کاراکتر در مبنای 16 را تطبیق می دهد. x20 برابر n\ می باشد.
'cC\' کاراکتر های کنترلی اسکی را تطبیق می دهد. cC اشاره به Ctrl+C دارد.
'u0020\' کاراکتر های یونیکد که به صورت هگز استفاده شده است را تطبیق می دهد وباید دقیقا چهار رقم باشد. البته در زبان PERL اینطوری استفاده میشود '{####}x\' برای یونیکد.
Meta Characters
'\' برای تطبیق فرا کاراکتر استفاده می شود مثلا در تطبیق کاراکتر * که هگز آن برابر است با x2A\ باید از این '*\' استفاده کنید.
'.' هر کاراکتری به غیر از n\ را تطبیق خواهد داد.
'-' برای تعیین یک سلسله کاراکتر پی در پی همراه با [] استفاده می شود مانند [9-0] که معادل [0123456789] می باشد.
'^' اگر در آغاز یک مجموعه باشد مقصود تطبیق هر کاراکتر به جز کاراکتر های مجموعه همراه کاراکتر ^ فوق است . در صورتی که خارج از مجموعه و در آغاز عبارت با قاعده باشد منظور تطبیق از ابتدای رشته است.
'*' صفر یا چند کاراکتر عبارت پیش از خود را تطبیق می دهد.
'+' یک ویا چند کاراکتر عبارت پیش از خود را تطبیق می دهد.
'?' این کاراکتر کاربرد های گوناگونی دارد که مهمترین آن تطبیق صفر ویا یک کاراکتر پیش از خود است.
'}' , '{' برای تعیین کمینه و بیشینه دفعات تکرار با استفاد از قالب بندی {n,m} کاربرد دارد.
'$' برای تطبیق پایان متن کاربرد دارد.
'|' خط عمود در ساختار های متناوب کاربرد دارد.
')','(' برای ایجاد زیر عبارتها و گروه بندی ارجاع به عقب و ... استفاده می شود.
'#' برای درج توضیحات در الگوها استفاده می شود.
موفق باشید
این مثال را هم امتحان کن!!!
در کل اگر بخواهی با عبارت های باقاعده مشکلت را رفع کنی باید اول یک الگو برای یافتن بدی بهش و بعد از Substitutions استفاده کنید برای عملیات جایگزینی خیلی ساده است.
public String customReplace(String valueStr) {
Pattern pattern = Pattern.compile("(?<=\b(?<g1>i:I)c)\w+\b");
Matcher matcher ;
while ((matcher = pattern.matcher(valueStr)).find(0)) {
valueStr = matcher.replaceFirst("$i see");
}
return valueStr;
}
سلام
یک دنیا ممنون از لطف تون
چک میکنم خبر میدم. ..
آخرین ویرایش به وسیله mani2000 : یک شنبه 23 اردیبهشت 1397 در 10:54 صبح
دوست گرامی مبحث عبارتهای باقاعده یک کتاب 200 صفحه ای تمام این مشکل هایی که داری میتونی توش پبدا کنی یکم تحقیق کنید بد نیست.
برای استفاده از پرانتز ویا هر کاراکتری که جزیی از کامپایلر عبارتهای با قاعده باشه باید از Carriage Return کاراکتر ها استفاده کنید مثلا 'n\\' در جاوا و یا در پلتفرم NET.
سلام
باور کنید کل کتاب رو زیرو کردم اما بعضی مواقع جواب نمیده
الان برای شکلک ها درست شد
فقط یک مورد دیگه مونده که هرکاری کردم نشد و ناچار پرسیدم
چطور کلماتی مثل
mamamama
رو به
mama
تبدیل کنم
یعنی فقط دوبار تکرار رو نگه دارم؟؟؟
ممنون میشم راهنمایی کنید