رفتن به مطلب
  • 0

سوال: الگوریتم تشخیص و تغییر قسمتی از متن


Kazem Forghani

سوال

سلام ،

دوستان تصور کنید متنی به این صورت دارم که تعداد تگ ها و کاراکتر های اون ممکنه هر مقداری باشه:

<html><head><title>***</title></head><body></body></html>

حالا قصد دارم متن بین دو تگ <title></title> رو تغییر بدم. ممکنه این متن هر چیزی یا هر تعداد کاراکتری باشه. و ممکنه تگ های دیگه ای قبل یا بعد از این تگ ها اضافه بشه. (یعنی تعداد کاراکتر های کل متن تغییر می کنه.) علاوه بر این ممکنه همین تگ ها یعنی <title></title> در جایی دیگه از متن تکرار بشه و من قصد دارم فقط متن بین این دو کاراکتر که در بین تگ های <head></head> هست رو تغییر بدم.

خیلی گیج شدم و نمی دونم از چه دستورهایی استفاده کنم.

لطفاً راهنمایی کنید.

با تشکر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

regex یا عبارات باقاعده یه موتور جدا گانه هست هست که برای اولین بار توسط یه شخصی که یادم نیست اسمش چی بود تبدیل به یه کتابخونه C شد بعد کاربردش گسترش پیدا کرد

کارش اینه که میگرده و قواعدی که شما تعریف میکنید رو برای شما پیدا میکنه حالا این قواعد رو چطور اجرا کنید و بنویسید فکر کنم این مقاله و سایت بهتون خیلی کمک میکنه چون مباحثش کمی طولانی هست

متغیر matcher هم که از نامش مشخصه کارش ذخیره متون تطبیق پیدا کرده هست که به صورت لیست ذخیره میکنه

مقاله : لینک

سایت : لینک

 

چیت شیت ریجکس

[abc] هر کاراکتر واحد a، b یا c

[^abc] هر کاراکتری به غیر از کاراکترهای a، b یا c

[a-z] کاراکترهای بین (و شامل) a تا z

[^a-z] کاراکترهای به غیر از a تا z

[A-Z] کاراکترهای بین (و شامل) A تا Z

. هر کاراتری

\s هر کاراکتر وایت اسپیس (مانند tab)

\S هر کاراکتری که وایت اسپیس نیست

\d ارقام بین 0 تا 9

\D به غیر از ارقام

\w هر کاراکتر کلمه ای (حروف الفبا، اعداد و آندراسکور)

\W هر کاراکتر غیر کلمه ای

(…) تمام چیزهای داخل محدوده

(a|b)   حروف a یا b

a? کاراکتر a یا وجود نداشته باشد و یا یکبار ظاهر شده باشد

a* کاراکتر a یا وجود نداشته باشد و یا دفعات زیادی ظاهر شده باشد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

فرقانی جان یه راهی به ذهن مخشوشم رسیده :malih: ببین کمک میکنه یا نه

 از اونجایی که html یه زبون پویا نیست میتونی یه جورایی خودت این کارو بگنی به این صورت هر کدوم از تگ ها رو به دوتا متغیر نسبت بده یکی واسه باز شدن یکی واسه بسته شدن مثلا به صورت زیر

dim htmlopen as String="<html>"
dim htmlclose as String="</html>"
dim titleopen as String="<title>"
dim titleclose as String="</title>"
و الی آخر...

حالا کدهاتو بین این تگها بزار مثلا به شکل زیر 

dim Tag as String=htmlopen&titleopen&"yourtitle"&titleclose&htmlclose

خودت دیگه روش کار کن و حالتهای مختلف رو درست کن

اینجوری درواقع داریم یه html محلی واسه خودمون میسازیم

موفق باشی

لینک ارسال
به اشتراک گذاری در سایت های دیگر

فرقانی جان یه راهی به ذهن مخشوشم رسیده :malih: ببین کمک میکنه یا نه

 از اونجایی که html یه زبون پویا نیست میتونی یه جورایی خودت این کارو بگنی به این صورت هر کدوم از تگ ها رو به دوتا متغیر نسبت بده یکی واسه باز شدن یکی واسه بسته شدن مثلا به صورت زیر

dim htmlopen as String="<html>"
dim htmlclose as String="</html>"
dim titleopen as String="<title>"
dim titleclose as String="</title>"
و الی آخر...

حالا کدهاتو بین این تگها بزار مثلا به شکل زیر 

dim Tag as String=htmlopen&titleopen&"yourtitle"&titleclose&htmlclose

خودت دیگه روش کار کن و حالتهای مختلف رو درست کن

اینجوری درواقع داریم یه html محلی واسه خودمون میسازیم

موفق باشی

سلام و تشکر از پاسخ مفید شما مشکل حل شد ،

یه سوال دیگه در همین رابطه داشتم. اگر کاربر از طریق کدنویسی تایتل رو تغییر داد چطوری می شه تایتل رو گرفت و در یک EditText نشون داد؟؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام و تشکر از پاسخ مفید شما مشکل حل شد ،

یه سوال دیگه در همین رابطه داشتم. اگر کاربر از طریق کدنویسی تایتل رو تغییر داد چطوری می شه تایتل رو گرفت و در یک EditText نشون داد؟؟؟

 

سوال خوبی بود راه حل های زیادی براش هست ولی من چون موتور regex رو دوست دارم با این راه بهت میگم 

راه کلی به این صورت هست

	Dim str As String = "<html><head><title>My Title</title></head><body></body></html>"
	Dim m As Matcher = Regex.Matcher("<title>([^<]+)<\/title>", str)
	Do While m.Find
		For g = 1 To m.GroupCount
  			Log(m.Group(g))
 		Next
	Loop

ولی چون تگ title یکی هست در سند html میتونی کد رو به این صورت تغییر بدی یعنی حلقه رو حذف کنی

	Dim str As String = "<html><head><title>My Title</title></head><body></body></html>"
	Dim m As Matcher = Regex.Matcher("<title>([^<]+)<\/title>", str)
	Do While m.Find
			Log(m.Group(1))
	Loop

در خصوص regex تحقیق کن خیلی کمک حالت میشه

موفق باشی

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سوال خوبی بود راه حل های زیادی براش هست ولی من چون موتور regex رو دوست دارم با این راه بهت میگم 

راه کلی به این صورت هست

	Dim str As String = "<html><head><title>My Title</title></head><body></body></html>"
	Dim m As Matcher = Regex.Matcher("<title>([^<]+)<\/title>", str)
	Do While m.Find
		For g = 1 To m.GroupCount
  			Log(m.Group(g))
 		Next
	Loop

ولی چون تگ title یکی هست در سند html میتونی کد رو به این صورت تغییر بدی یعنی حلقه رو حذف کنی

	Dim str As String = "<html><head><title>My Title</title></head><body></body></html>"
	Dim m As Matcher = Regex.Matcher("<title>([^<]+)<\/title>", str)
	Do While m.Find
			Log(m.Group(1))
	Loop

در خصوص regex تحقیق کن خیلی کمک حالت میشه

موفق باشی

سلام ،

با تشکر از پاسخ مفید شما. بنده با Regex کار نکردم اگر ممکنه کمی درباره کدها توضیح بدید.

ممنون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...