首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >短语后面的捕获号

短语后面的捕获号
EN

Stack Overflow用户
提问于 2019-04-25 11:05:14
回答 3查看 58关注 0票数 0

我有这样的条件:

  1. 你的签约奖金是123,000
  2. 今年的签约奖金很糟糕。今年的签约奖金是12.3万欧元。
  3. 奖金为14456英镑,但签约奖金。

我想要的输出如下:

如果有任何数字紧跟在signing bonus后面,则保留字符串的该部分并删除所有内容。见预期输出1& 2

( b)如果没有数字后面跟着signing bonus,我应该得到第一部分的刺。见预期输出3

预期输出

  1. 是123,000
  2. 今年是12.3万欧元。
  3. 奖金是14,456,但是

My Regex:

代码语言:javascript
复制
match1 = re.findall(r'(?<=\bSigning Bonus\b)\s*(?:\S+\b\s*){0,8}',value, re.I|re.M|re.DOTALL)

处理输出1和输出2,但不能处理输出3.

我也是开放的解决方案,可以不需要正则!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-25 11:27:49

如果您可以使用re.sub,那么您可以使用这个正则表达式用空字符串替换匹配的文本,

代码语言:javascript
复制
^[^\d\n]*signing bonus\s*|\s*signing bonus[^\d\n]*$

在前两种情况下,您打算在signing bonus之后捕获字符串,但在第三种情况下,您的预期字符串在signing bonus之前,因此需要使用交替的另一个正则表达式。

Regex Demo

Python代码,

代码语言:javascript
复制
import re

arr = ['Your signing bonus is 123,000','This year signing bonus is bad. the signing bonus for this year is EUR 123,000','The bonus is 14,456, but signing bonus.']

for s in arr:
 print(s, '-->', re.sub(r'^[^\d\n]*signing bonus\s*|\s*signing bonus[^\d\n]*$', '', s))

指纹,

代码语言:javascript
复制
our signing bonus is 123,000 --> is 123,000
This year signing bonus is bad. the signing bonus for this year is EUR 123,000 --> for this year is EUR 123,000
The bonus is 14,456, but signing bonus. --> The bonus is 14,456, but
票数 2
EN

Stack Overflow用户

发布于 2019-04-25 11:29:29

试试下面的代码。

代码语言:javascript
复制
s1 = "Your signing bonus is 123,000"
s2 = "This year signing bonus is bad. the signing bonus for this year is EUR 123,000"
s3 = "The bonus is 14,456, but signing bonus."
regex = '[0-9]'
import re
def format_string(s):
    for subs in s.split('signing bonus'):
        if re.findall(regex, subs):
            print subs.strip()

format_string(s1)
format_string(s2)
format_string(s3)

产出如下:

代码语言:javascript
复制
is 123,000
for this year is EUR 123,000
The bonus is 14,456, but
票数 4
EN

Stack Overflow用户

发布于 2019-04-25 11:31:05

这将打印出你的答案:

代码语言:javascript
复制
statements = [
    'Your signing bonus is 123,000',
    'This year signing bonus is bad. the signing bonus for this year is EUR 123,000',
    'The bonus is 14,456, but signing bonus.',
]
for statement in statements:
    ans = statement.split('signing bonus')
    if not ans:
        print('')
        continue
    for i in range(len(ans) - 1, -1, -1):
        for word in ans[i].split(' '):
            try:
                number = int(word.replace(',', ''))
                print(ans[i].strip())
                break
            except:
                pass

输出:

代码语言:javascript
复制
is 123,000
for this year is EUR 123,000
The bonus is 14,456, but
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55847844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档