[英]Python regex to get everything until the first dot in a string
find = re.compile("^(.*)\..*")
for l in lines:
m = re.match(find, l)
print m.group(1)
我希望在字符串中使用正則表達式直到第一個點。
在a@bc
,我想要a@b
在a@bcd
,我想要a@b
在a@bcde
,我想要a@b
我的代碼給了我什么......
a@bc
打印a@b
a@bcd
打印a@bc
a@bcde
打印a@bcd
應該找到什么才能得到@ b?
默認情況下,所有量詞都是貪婪的。 從某種意義上說,他們會盡量消耗盡可能多的字符串。 你可以通過追加一個讓他們不情願?
在他們之后:
find = re.compile(r"^(.*?)\..*")
如評論中所述,如果字符串中沒有句點 ,則此方法將失敗。 所以,這取決於你希望它的表現方式。 但是如果你想在這種情況下獲得完整的字符串,那么你可以使用一個否定的字符類:
find = re.compile(r"^([^.]*).*")
它會在遇到第一個句點后或字符串的結尾處自動停止。
你也不想使用re。 match()
那里。 回覆。 search()
應該沒問題。 您可以將代碼修改為:
find = re.compile(r"^[^.]*")
for l in lines:
print re.search(find, l).group(0)
您可以使用split
方法:將字符串拆分為.
角色一次,你會得到一個元組(在第一個時期之前,在第一個時期之后)。 符號將是:
mystring.split(".", 1)
然后你可以簡單地創建一個“產生”你感興趣的部分的生成器,並忽略你不感興趣的那個( _
符號)。 它的工作原理如下:
entries = [
"a@b.c",
"a@b.c.d",
"a@b.c.d.e",
]
for token, _ in (entry.split(".", 1) for entry in entries):
print token
輸出:
a@b
a@b
a@b
可以在線找到split
方法的文檔:
str.split([sep[, maxsplit]])
使用
sep
作為分隔符字符串,返回字符串中單詞的列表。 如果給出maxsplit
則最多完成maxsplit
拆分(因此,列表最多將包含maxsplit+1
元素)。 如果未指定maxsplit
或-1,則對分割數量沒有限制(進行所有可能的分割)。
在這種情況下我建議partition
或split
; 當沒有點時,它們運作良好。
text = "example@example.com"
print text.partition(".")[0]
print text.split(".", 1)[0]
import re
data='a@b.c.d.e'
re.sub('\..*','',data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.