我有一个正则表达式,它从字符串中抓取郊区,该字符串通常包含以下格式的郊区和行业:
INDUSTRY - SUBURB
有时字符串可能不包含INDUSTRY -
部分,只有郊区。在这种情况下,我的正则表达式无法抓取任何内容。
有没有办法让正则表达式足够强大,可以在supn 之后获取所有内容如果它现在只是抓住所有东西?
以下正则表达式不起作用:(- |^)(.*)(,|$)
结果是:dvertising - Roseville Chase
答案 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)(.*)
之后的所有内容。您可以试用here。