找到某个字符有N个不连续的实例的单词?

2024-05-16 15:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在字符串中找到唯一的ID:

text = "Hello World, aaaa_dddd_bbbb_cccc"

唯一标识的唯一定义特性是它是一个包含三个下划线的单词。然而,就我的一生而言,我甚至不能开始找出正则表达式来匹配某个字符的N个非连续实例。你知道吗

我能做的最好的事情就是使用.split()

unique_id = None

for word in text.split(' '):
    if len(word.split("_")) > 2:
        unique_id = word

Tags: 字符串textidhelloworld定义标识word
3条回答
>>> text = "Hello World, aaaa_dddd_bbbb_cccc"

>>> re.search(r'(\w+_\w+){3}', text)
<_sre.SRE_Match object; span=(13, 32), match='aaaa_dddd_bbbb_cccc'>

模式匹配一个或多个单词字符,后跟下划线,后跟一个或多个单词字符,共三次。你知道吗

docs

{m}

Specifies that exactly m copies of the previous RE should be matched; fewer matches cause the entire RE not to match. For example, a{6} will match exactly six 'a' characters, but not five.

您可以使用regex findall获得所有匹配项的列表,例如:

text = "Hello World, aaaa_dddd_bbbb_cccc, 1_2_3_4"

import re
found = re.findall(r'[^_ ]*_[^_ ]+_[^_ ]+_[^_ ]*',text)

print(found)
# -> ['aaaa_dddd_bbbb_cccc,', '1_2_3_4']

这允许字符串以_开头和结尾,例如_1_2_3,如果您不想这样做,可以将第一个和最后一个*更改为+

使用简单的正则表达式模式:

import re

s = "Hello World, aaaa_dddd_bbbb_cccc"
m = re.search(r'\b([^_\s]+_){3}[^_\s]+\b', s)
result = m.group() if m else m

print(result)

输出:

aaaa_dddd_bbbb_cccc

模式可以更严格(取决于允许哪些字符),例如:

...
m = re.search(r'\b([a-z0-9]+_){3}[a-z0-9]+\b', s, re.I)
...

相关问题 更多 >