python 如何使用正则表达式提取指定特殊令牌的正面和背面?

3pvhb19x  于 2022-12-10  发布在  Python
关注(0)|答案(3)|浏览(87)

如何提取一个指定的特殊标记(在本例中是-,而不是@)的前后部分?如果由-连接的标记多于两个,我也要提取它们。(在本例中是比尔-盖茨基金会)
例如,来自“Meinda@比尔盖茨基金会@药物递送”-〉[“比尔盖茨基金会”,“药物递送”]
我试过p = re.compile('@(\D+)\*(\D+)')
但那不是我想要的。

93ze6v8z

93ze6v8z1#

您可以排除匹配@字符,并重复-一次或多次

@([^\s@-]+(?:-[^\s@-]+)+)

说明

  • @逐字匹配
  • (捕获组1(由re.findall返回)
  • [^\s@-]+匹配1+个非空白字符,-@除外
  • (?:-[^\s@-]+)+重复1次以上匹配-,并再次匹配1次以上非空白字符(-@除外)
  • )关闭组1

Regex demo

import re

pattern = r"@([^\s@-]+(?:-[^\s@-]+)+)"
s = r"Meinda@Bill-Gates-Foundation@drug-delivery"
print(re.findall(pattern, s))

输出量

['Bill-Gates-Foundation', 'drug-delivery']
ctehm74n

ctehm74n2#

要提取指定的特殊标记(在本例中为-,而不是@)的前面和后面,可以使用正则表达式和re模块。
下面是一个示例,说明如何使用正则表达式提取给定字符串中-标记的前面和后面:

import re

# The input string
string = 'Meinda@Bill-Gates-Foundation@drug-delivery'

# Use a regular expression to extract the front and back of the '-' token
p = re.compile(r'@([\w-]+)@([\w-]+)')
matches = p.findall(string=string)

# Print the matches
print(matches)

此代码将打印以下输出:

[('Bill-Gates-Foundation', 'drug-delivery')]
2guxujil

2guxujil3#

@ ahmet-buğra-bua用正则表达式给出了答案。
如果你不需要使用正则表达式,那么更简单的方法就是直接使用split。

test_str = "Meinda@Bill-Gates-Foundation@drug-delivery"
test_str.split("@")[1:]

此输出

['Bill-Gates-Foundation', 'drug-delivery']

你可以把它变成这样的函数

def get_list_of_strings_after_first(original_str, token_to_split_on):
    return original_str.split("@")[1:]
get_list_of_strings_after_first("Meinda@Bill-Gates-Foundation@drug-delivery", "@")

这给予相同的输出

['Bill-Gates-Foundation', 'drug-delivery']

相关问题