有条件地将字母添加到字符串

哈里森

输入1 10 avenue

所需输出1 10th avenue

如您在上面看到的,我给出了一个输入示例,以及我想要的所需输出。从本质上讲,我需要查找数字后面紧跟某种模式(大道,街道等)的实例。我有一个包含所有模式的列表,称为patterns

如果该数字后面没有“ th”,我想添加“ th”。只需添加“ th”就可以了,因为我的代码的其他部分将在必要时将其更正为“ st”,“ nd”,“ rd”。

例子:

1 10th avenue 好的

1 10 avenue 不好,应该添加!

我已经实现了一个可行的解决方案,它是这样的:

def Add_Th(address):
    try:
        address = address.split(' ')
    except AttributeError:
        pass
    for pattern in patterns:
        try:
            location = address.index(pattern) - 1
            number_location = address[location]
        except (ValueError, IndexError):
            continue
        if 'th' not in number_location:
            new = number_location + 'th'
            address[location] = new
        address = ' '.join(address)

    return address

我想将此实现转换为regex,因为此解决方案对我来说似乎有点混乱,并且偶尔会引起一些问题。我对regex并不是最好的,所以如果有人可以引导我朝正确的方向前进,将不胜感激!

这是我当前对regex实现的尝试:

def add_th(address):

    find_num = re.compile(r'(?P<number>[\d]{1,2}(' + "|".join(patterns + ')(?P<following>.*)')
    check_th = find_num.search(address)

    if check_th is not None:
        if re.match(r'(th)', check_th.group('following')):
            return address
        else:
            # this is where I would add th. I know I should use re.sub, i'm just not too sure
            # how I would do it
    else:
        return address

我对正则表达式没有太多经验,所以请让我知道我所做的任何工作是否不正确,以及将“ th”添加到适当位置的最佳方法是什么。

谢谢。

斯蒂芬·波希曼(Stefan Pochmann)

仅一种方法,即找到一个数字后面那些模式词之一之前的位置并放入'th'其中:

>>> address = '1 10 avenue 3 33 street'
>>> patterns = ['avenue', 'street']
>>> 
>>> import re
>>> pattern = re.compile(r'(?<=\d)(?= ({}))'.format('|'.join(patterns)))
>>> pattern.sub('th', address)
'1 10th avenue 3 33th street'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有条件地将JSF组件添加到翻译字符串中

将信息添加到有条件地比较字符串的列中

有条件地将字符添加到 Pandas DataFrame 中字符串的开头

有条件地将关键字添加到 JavaScript 中的字符串

使用Angular表达式有条件地将字符串添加到HTML

如何有条件地将元素添加到R中的字符开头?

有条件地将查询字符串附加到有角度的href

使用jquery根据字符数有条件地将文本添加到标题标签

有条件地添加到地图

如果等于列,则有条件地删除首字母字符串

如何有条件地将“按钮”添加到“工具栏”“表单”“组件”?

有条件地将CircleMarkers添加到传单

使用jq有条件地将元素添加到json数组

如何有条件地将元素添加到 std::array - C++11

有条件地将文件添加到C ++项目中的库

有条件地将12小时添加到列中

有条件地将列和值添加到Spark Rows

打字稿:有条件地将项目添加到对象

定义列表时有条件地将项目添加到列表?

R - 如何有条件地将连续列添加到数据框?

有条件地将标签选项参数添加到select2

有条件地将选项添加到列表

Spark:有条件地将列添加到数据框

有条件地将列添加到 dplyr R 中的 groupby

使用Polymer将CSS类有条件地添加到元素

有条件地将target =“ _ blank”添加到Angular JS的链接

有条件地将多个类添加到元素

如何有条件地将小部件添加到列表?

Scala:将项目添加到序列中或有条件地合并序列