如果它存在,抓住角色后的一切

时间:2015-05-19 00:50:50

标签: python regex

我有一个正则表达式,它从字符串中抓取郊区,该字符串通常包含以下格式的郊区和行业:

INDUSTRY - SUBURB

有时字符串可能不包含INDUSTRY -部分,只有郊区。在这种情况下,我的正则表达式无法抓取任何内容。

有没有办法让正则表达式足够强大,可以在supn 之后获取所有内容如果它现在只是抓住所有东西?

以下正则表达式不起作用:(- |^)(.*)(,|$)

结果是:dvertising - Roseville Chase

4 个答案:

答案 0 :(得分:3)

有两组:一组用于行业加连字符,一组用于郊区。使用问号使行业组可选。

pattern = re.compile(r"([^-]*-)?(.*)")
pattern.match("Advertising - Roseville Chase").group(2)
pattern.match("Amityville").group(2)

答案 1 :(得分:2)

不使用(.*),而是使用([^-]*)

(- |^)([^-]*)(,|$)

行动中:

import re

re.search(r"(- |^)([^-]*)(,|$)", "Advertising - Roseville Chase").group(2)
Out[97]: 'Roseville Chase'

re.search(r"(- |^)([^-]*)(,|$)", "Roseville Chase").group(2)
Out[98]: 'Roseville Chase'

*要求提供更多解释:

[^ - ]表示"除 - "以外的任何字符。通过使用[^ - ],如果存在连字符,则使正则表达式无法匹配整个字符串。它必须匹配连字符后的所有内容。

答案 2 :(得分:1)

嗯......使用正则表达式更容易做到,我必须坐下来查看其他答案,而不是Python'关于 - 我同意罗伯特。

我只是去找:

def suburb_or_all(text):
    industry, hyphen_present, suburb = text.partition(' - ')
    return suburb if hypen_present else text

完全可读,自我记录且效率极高。

答案 3 :(得分:-1)

你可以这样做:limits.h它会返回(?<=-\s)(.*)之后的所有内容。您可以试用hereexample