我曾在這名之後寫了一個PDF一個「/」不正確的輸出,由於正則表達式
例如:/約翰·亞當威爾紐曼
我想提取的名稱以「/」,
這是我寫的代碼是:
names=re.compile(r'((/)((\w)+(\s)))+')
然而,它產生的字符串「JOHN」只是名字和太2噸imes不是名字的其餘部分。
我曾在這名之後寫了一個PDF一個「/」不正確的輸出,由於正則表達式
例如:/約翰·亞當威爾紐曼
我想提取的名稱以「/」,
這是我寫的代碼是:
names=re.compile(r'((/)((\w)+(\s)))+')
然而,它產生的字符串「JOHN」只是名字和太2噸imes不是名字的其餘部分。
您的+
位於錯誤的位置;你的正則表達式,因爲它的立場,將要求/John /Adam /Will /Newman
,尾隨空間。
r'((/)((\w)+(\s))+)'
稍微好一點;它將接受/John Adam Will
,尾隨空格;將不會採取Newman
,因爲沒有什麼可以匹配\s
。
r'((/)(\w+(\s\w+)*))'
與您發佈的內容相符。請注意,有必要重複其中一個匹配名稱的序列,因爲如果有N個詞,我們需要N-1個空格。
(作爲的Ondrej格羅弗在評論中說,你可能有太多不必要的捕獲括號,但我離開,僅僅因爲它傷害了什麼,但性能。)
沒問題,如果我想在屏幕上打印整個名稱而不顯示所有組的結果,該怎麼辦?我試過這個, namelist = names.findall(text) pyperclip.copy(namelist) 但它給了我錯誤 –
我覺得你定義了太多的未命名的正則表達式組。我會做這樣的事情
import re
s = '/John Adam Will Newman'
name_regexp = re.compile(r'/(?P<name>(\w+\s*)+)')
match_obj = name_regexp.match(s) # match object
group_dict = match_obj.groupdict() # dict mapping {group name: value}
name = group_dict['name']
(?P<name>...)
啓動名爲組
(\w+\s*)
是一個或多個匹配alphanum字符組,後面可能跟着一些空白
匹配對象由.match(s)
方法返回的方法具有方法groupdict()
,其返回dict
,其從組名映射到其內容
我沒有完全理解代碼的這部分,match(s).groupdict()['名稱'] –
我使它更加冗長,鋤頭這有助於。 –
請提供一個更完整的代碼示例,它將顯示如何使用正則表達式。我懷疑你使用了錯誤的組號,因爲你指定了太多無用的組。 –
這是從pdf中提取名稱的唯一代碼! –