2024-05-16 15:33:41 发布
网友
我想在字符串中找到唯一的ID:
text = "Hello World, aaaa_dddd_bbbb_cccc"
唯一标识的唯一定义特性是它是一个包含三个下划线的单词。然而,就我的一生而言,我甚至不能开始找出正则表达式来匹配某个字符的N个非连续实例。你知道吗
我能做的最好的事情就是使用.split():
.split()
unique_id = None for word in text.split(' '): if len(word.split("_")) > 2: unique_id = word
>>> 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.
{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获得所有匹配项的列表,例如:
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,如果您不想这样做,可以将第一个和最后一个*更改为+
_
_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) ...
模式匹配一个或多个单词字符,后跟下划线,后跟一个或多个单词字符,共三次。你知道吗
从docs:
您可以使用regex
findall
获得所有匹配项的列表,例如:这允许字符串以
_
开头和结尾,例如_1_2_3
,如果您不想这样做,可以将第一个和最后一个*
更改为+
使用简单的正则表达式模式:
输出:
模式可以更严格(取决于允许哪些字符),例如:
相关问题 更多 >
编程相关推荐