簡體   English   中英

Python正則表達式獲取所有內容直到字符串中的第一個點

[英]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)

在ideone上演示

在這種情況下,您可以使用.find()而不是正則表達式:

>>> s = "a@b.c"
>>> print(s[0:s.find('.')])
a@b

考慮到這些注釋,這里使用.index()一些修改(它類似於.find()除了它在沒有匹配的字符串而不是-1時返回錯誤):

>>> s = "a@b.c"
>>> try:
...     index = s.index('.')
... except ValueError:
...     index = len(s)
...
>>> print(s[:index])
a@b

您可以使用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,則對分割數量沒有限制(進行所有可能的分割)。

在這種情況下我建議partitionsplit ; 當沒有點時,它們運作良好。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM