用于选择以包含数字的标记开头的短语的正则表达式
Regex for selecting a phrase starting with tokens containing digits
我有这样的文字:
text = 'this is a sentence, it has 1 number in it, and another one 123 here. we want to select n8m3r1c-aa words and phrases - until the punctuation. this is some phr4se!1 with text.'
我的目标是 select 个片段,从任何 token/word 开始,其中有一个数字,前面有一个 space。选择应该发生在找到下一个标点符号之前,而不是标记内的标点符号。
预期输出:
1 number in it
123 here
n8m3r1c-aa words and phrases
phr4se!1 with text
我目前的做法:
re.findall(r'\s(\d.+?)[.,!]', text)
但这只能找到:
1 number in it
123 here
我有点卡住了 selection 在不仅以数字开头而且还包含数字的标记处开始。感谢任何帮助和建议!
您尝试的模式得到 2 个匹配项,因为它以 \s(\d
开头,这意味着它应该以数字开头。
您可以使用 [^\s\d]*\d\S*
来匹配可选的空白字符直到第一个数字,并且可以选择匹配后面的非空白字符。
(?<!\S)[^\s\d]*\d\S*.*?(?=[.,!-])
部分
(?<!\S)
断言空白边界在左边
[^\s\d]*
匹配除空白字符或数字以外的任何字符
\d
匹配一个数字
\S*
匹配 0+ 次非空白字符(“单词”的其余部分)
.*?
尽可能匹配除换行符外的任何字符
(?=[.,!-])
正面前瞻,断言右边是任何列出的字符
如果开头应该有一个空白字符,您还可以使用捕获组并匹配前后的内容:
\s([^\s\d]*\d\S*.*?)[.,!-]
我有这样的文字:
text = 'this is a sentence, it has 1 number in it, and another one 123 here. we want to select n8m3r1c-aa words and phrases - until the punctuation. this is some phr4se!1 with text.'
我的目标是 select 个片段,从任何 token/word 开始,其中有一个数字,前面有一个 space。选择应该发生在找到下一个标点符号之前,而不是标记内的标点符号。
预期输出:
1 number in it
123 here
n8m3r1c-aa words and phrases
phr4se!1 with text
我目前的做法:
re.findall(r'\s(\d.+?)[.,!]', text)
但这只能找到:
1 number in it
123 here
我有点卡住了 selection 在不仅以数字开头而且还包含数字的标记处开始。感谢任何帮助和建议!
您尝试的模式得到 2 个匹配项,因为它以 \s(\d
开头,这意味着它应该以数字开头。
您可以使用 [^\s\d]*\d\S*
来匹配可选的空白字符直到第一个数字,并且可以选择匹配后面的非空白字符。
(?<!\S)[^\s\d]*\d\S*.*?(?=[.,!-])
部分
(?<!\S)
断言空白边界在左边[^\s\d]*
匹配除空白字符或数字以外的任何字符\d
匹配一个数字\S*
匹配 0+ 次非空白字符(“单词”的其余部分).*?
尽可能匹配除换行符外的任何字符(?=[.,!-])
正面前瞻,断言右边是任何列出的字符
如果开头应该有一个空白字符,您还可以使用捕获组并匹配前后的内容:
\s([^\s\d]*\d\S*.*?)[.,!-]