如何编写 if-then-else 正则表达式?
How to write if-then-else regex?
以下代码是用于从数据帧中查找子字符串的正则表达式。
如何修改正则表达式如下:
if x[0] is an English letter, that is, [a-zA-Z], then keep the first `\b`, else remove it
AND
if x[-1] is an English letter, that is, [a-zA-Z], then keep the last `\b`, else remove it
for k, v in keyword.items():
pat = '|'.join(r"\b{}\b".format(x) for x in v)
df[str(k)] = df['string'].str.contains(pat).astype(int)
String = 'BEAUTY Company is good, 歡迎~~YOU, SALE'
BEA: not match
Com: not match
歡迎: match
SALE: match
谢谢。
你可以这样做
import re
if (re.search(r'[a-zA-Z]',x[0]):
print(x[0])
else:
x = x[1:]
if(re.search(r'[a-zA-Z]',x[-1]):
print(x[-1])
else:
x = x[:-1]
您可以使用
pat = r'(?!(?<=[A-Za-z])[A-Za-z])(?:{})(?<)'.format("|".join([re.escape(x) for x in v]))
这里主要是环顾四周,(?!(?<=[A-Za-z])[A-Za-z])
和 (?<)
。
如果当前位置(即关键字的第一个字符)的右侧是一个前面有另一个 ASCII 字母的 ASCII 字母 (检查了正后视 (?<=[A-Za-z])
).
(?<)
是一个否定后视,如果当前位置的左侧(即关键字的最后一个字符)是一个 ASCII 字母,后面跟着另一个 ASCII 字母(检查正向前瞻 (?=[A-Za-z])
).
请注意,您不必将这些外观添加到正则表达式中的每个替代项,只需使用它们来包围一个 (?:...|...)
样的替代组,您可以像我上面显示的那样动态构建它。
此外,如果任何关键字可以包含应被视为文字字符的特殊正则表达式字符,[re.escape(x) for x in v]
会很方便。
import re
s = 'BEAUTY Company is good, 歡迎~~YOU, SALE'
v = ['BEA','Com','歡迎','SALE']
pat = r'(?!(?<=[A-Za-z])[A-Za-z])(?:{})(?<)'.format("|".join([re.escape(x) for x in v]))
print(re.findall(pat, s)) # => ['歡迎', 'SALE']
以下代码是用于从数据帧中查找子字符串的正则表达式。
如何修改正则表达式如下:
if x[0] is an English letter, that is, [a-zA-Z], then keep the first `\b`, else remove it
AND
if x[-1] is an English letter, that is, [a-zA-Z], then keep the last `\b`, else remove it
for k, v in keyword.items():
pat = '|'.join(r"\b{}\b".format(x) for x in v)
df[str(k)] = df['string'].str.contains(pat).astype(int)
String = 'BEAUTY Company is good, 歡迎~~YOU, SALE'
BEA: not match
Com: not match
歡迎: match
SALE: match
谢谢。
你可以这样做
import re
if (re.search(r'[a-zA-Z]',x[0]):
print(x[0])
else:
x = x[1:]
if(re.search(r'[a-zA-Z]',x[-1]):
print(x[-1])
else:
x = x[:-1]
您可以使用
pat = r'(?!(?<=[A-Za-z])[A-Za-z])(?:{})(?<)'.format("|".join([re.escape(x) for x in v]))
这里主要是环顾四周,(?!(?<=[A-Za-z])[A-Za-z])
和 (?<)
。
如果当前位置(即关键字的第一个字符)的右侧是一个前面有另一个 ASCII 字母的 ASCII 字母 (检查了正后视 (?<=[A-Za-z])
).
(?<)
是一个否定后视,如果当前位置的左侧(即关键字的最后一个字符)是一个 ASCII 字母,后面跟着另一个 ASCII 字母(检查正向前瞻 (?=[A-Za-z])
).
请注意,您不必将这些外观添加到正则表达式中的每个替代项,只需使用它们来包围一个 (?:...|...)
样的替代组,您可以像我上面显示的那样动态构建它。
此外,如果任何关键字可以包含应被视为文字字符的特殊正则表达式字符,[re.escape(x) for x in v]
会很方便。
import re
s = 'BEAUTY Company is good, 歡迎~~YOU, SALE'
v = ['BEA','Com','歡迎','SALE']
pat = r'(?!(?<=[A-Za-z])[A-Za-z])(?:{})(?<)'.format("|".join([re.escape(x) for x in v]))
print(re.findall(pat, s)) # => ['歡迎', 'SALE']