Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
x1 = ".,:-!?text. Txt"
x2 = ".,:-!?Text: txt"
Chciałbym usunąć z powyższego tekstu znaki "[?!;:,\.-]", które nie są literami
i nie są cyframi [^a-ząćęłńóśźż0-9A-ZĄĆĘŁŃÓŚŹŻ]" z lewej strony przed wyrazem "text"
Jak powinien wyglądać kod?
myRegExp.Pattern = "???????"
Offline
taki sed załatwia sprawę, przynajmniej dla twoich przykładów:
sed 's/^\([^"]*"\)[?!;:,\.-]*\(Text.*\)$/\1\2/gI'
Ostatnio edytowany przez seler (2017-12-27 14:02:09)
Offline
W pythonie może to wyglądać tak:
import re pat = re.compile('([^\w\d]*)') x1 = r'.,:-!?text. Txt' s = re.sub(pat, '', x1,count=1)
python regex - ([^\w\d]*)(.*)
pcre - ([^[:alnum:]]*)(.*)
Offline
To używam do VBS script
a to sprawdzam pattern: http://regexstorm.net/tester
ten pasuje
([^\w\d]*) , wielkie dzięki
na testerze zaznacza również wszystko pomiędzy wyrazami
a w VBS jest OK.
Ostatnio edytowany przez sexy69 (2017-12-27 16:06:57)
Offline
jest problem:
z wyrazu !żółć
usunięte zostaje wszystko,
Ostatnio edytowany przez sexy69 (2017-12-27 17:35:13)
Offline
To kewstia obsługi unicode. Jak to jest w VBS to nie wiem. W pythonie to się załatiwa tak:
In [11]: import re ...: pat = re.compile('([^\w\d]*)', re.UNICODE) ...: x1 = r'.,:-!?text. Txt' ...: s = re.sub(pat, '', x1,count=1) ...: In [12]: x2 = '!żółć' In [13]: s = re.sub(pat, '', x2, count=1) In [14]: In [14]: s Out[14]: 'żółć'
Offline
Nic z tego nie da się. zaadoptować.
W skrypcie VBS też mam to rozwiązane:
Biorę do pętli całe zdanie i sprawdzam po kolei od lewej czy są znaki do usunięcia.
Jeśli tak to usuwam i sprawdzam następny znak aż natrafię na literę albo liczbę to wchodzę z pętli.
RegExp załatwiłby to dwiema liniami tekstu.
myRegExp.Pattern = "??????????"
Text(nr) = myRegExp.Replace(Text(nr), "")
krócej i szybciej.
Sądziłem, że w RegExp można każdy kod dopasować do sytuacji ale,
zaczynam wątpić w jego uniwersalność.
Ostatnio edytowany przez sexy69 (2017-12-27 20:54:01)
Offline
Umieść to co chcesz wyrzucić:
([!?=:;.]*).*
Offline
taki powinien być efekt:
.,:-!?[b]żółć. Txt[/b] -> [b]żółć. Txt[/b]
.,:-!?[b]Żółć: tx[/b]t -> [b]Żółć: txt[/b]
to nie działa: "([!?=:;.]*).*
Text(nr) = ".,:-!?żółć. Txt"
myRegExp.Pattern = "([!?=:;.]*).*"
Set poszukiwane = myRegExp.Execute(Text(nr))
wynik = poszukiwane.Item(0)
'powinno być: żółć. Txt
a jest wszystko (nic nie usunięte.)
Ostatnio edytowany przez sexy69 (2017-12-28 09:20:50)
Offline
wykryłem to:
http://regexstorm.net/tester?p=%28%5b%5b%5cw%5d.*%5d*%29&i=.%2c%3a-!%3f24.+%c5%bc%c3%b3%c5%82%c4%87%0d%0a.%2c%3a-!%3f%c5%bb%c3%b3%c5%82%c4%87%3a+24
teraz tylko odwrócić całe zaznaczenie i będzie OK.
Offline
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00092 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.116.89.8' WHERE u.id=1 |
0.00061 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.116.89.8', 1732178029) |
0.00068 | SELECT * FROM punbb_online WHERE logged<1732177729 |
0.00059 | SELECT topic_id FROM punbb_posts WHERE id=316437 |
0.00107 | SELECT id FROM punbb_posts WHERE topic_id=30155 ORDER BY posted |
0.00078 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30155 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00105 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30155 ORDER BY p.id LIMIT 0,25 |
0.00112 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30155 |
Total query time: 0.00703 s |